版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
laravel Eloquent ORM 文档:https://learnku.com/docs/laravel/5.7/eloquent/2294
- 什么是ORM?
ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 业务对象时,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法即可。
ORM 两种最常见的实现方式是 ActiveRecord 和 DataMapper
ActiveRecord(非常流行) 中模型与数据表一一对应,
DataMapper 中模型与数据表是完全分离的。
Laravel 的 Eloquent ORM 使用 ActiveRecord 实现方式,每一个 Eloquent 模型类对应着数据库中的一张表,我们通过调用模型类的相应方法实现对数据库的增删改查。
由于 Eloquent 模型是查询构造器,你可在 Eloquent 查找中使用查询构造器的任何方法。
- 简单的来说
就是laravel框架内提供的一个实体关系映射框架(ORM),名字叫eloquent
是一个用于关系型数据库实体关系映射的组件,laravel内置的,可以以操作对象的方式操作数据库的数据变更和查询
以上的内容估计您也能对ORM进行一个了解了
与数据库的映射关系
类名 <------------> 表名
属性 <------------>字段
属性的约束 <--------->字段的类型
实例对象 <-------> 表记录
上面的白话是借鉴他的点击这里查看
- 简单总结一下orm操作数据库的方法
拿users表来说(User是model)
User::find(1) 查找单条数据
User::all() 查找所有数据
User::find(1)->delete() 删除单条数据
User::destory(array(1,2,3)) 删除单条或多条数据
User::save() 保存数据(我一般修改都用他)
也可以增加修改放一个接口用它:
$user= new User();
$user->fill($data)->save();
User::first() 取第一条数据
User::where('name', '=', '***')->update(array('pwd' => '**')); 指定查询条件,更新数据
User::truncate() 清空数据表,危险操作
User::where('name', '=', '**')->get(array('id','pwd')); 配合查询条件获取多条数据
User::pluck('name'); 返回表中该字段的第一条记录(这个确实很好用)
User::lists('name'); 返回一列数据
User::where('name', '=', '***')->toSql(); 获取查询的sql语句,仅用于条件,不能用户带get()之类的带查询结果的查询中(我一般打印sql的时候用的是:DB::connection()->enableQueryLog(); // 开启QueryLog,最后写dd(DB::getQueryLog());查看这样我感觉全部sql都有也方便)
条件查询的方法很多比如:
1.最普通的条件查询 User::where('字段名','查询字符','限制条件') 例:User::where('name', 'LIKE', '%...%').
2.多条件查询,使用多个where User::where('name', 'LIKE', '...%')->where('pwd', '=', '123')->get();或查询操作使用orWhere(),使用方法通where.
3.直接用sql语句写查询条件 User::whereRaw('name= ? and pwdLIKE ?', array('123', '%...%')).
4.其他查询方法:
whereIn(),whereBetween(),whereNested()子查询,orWhereNested(),whereNotIn(),whereNull(),whereNotNull()
5.快捷方式 whereName('123') 查询'name' = '123'的数据,默认系统无此方法需要字段定义在model上(如:照片图1),name为字段名称
6.结果排序:
使用order关键字:
User::where('name', '=', '123')->orderBy('id')->get(); 默认asc(正序)
orderBy('id', 'desc')(倒叙)
限制结果数量
take()方法
User::take(2)->get(); //select * from `users` limit 2
指定偏移
User::take(2)->skip(2)->get(); //select * from `users` limit 2 offset 2
7.分页:
User::where('name','=','123')->paginate(3) //每页显示5条
8.倆表或者多表联查(要有关联在能查)
模型关联这里放这自己看:(https://learnku.com/docs/laravel/6.x/eloquent-relationships/5177)
public function a()
{
return $this->belongsTo('App\Models\a', 'user_id','id');
}
public function b()
{
return $this->belongsTo('App\Models\b', 'a_id','aid');
}
$model = $this->whereHas('a', function ($query) use ($search) {
$query->orwhere('name', 'like', '%' . $search['name'] . '%');
})->whereHas('b', function ($query) use ($search) {
$query->orwhere('p_phone', 'like', '%' . $search['name'] . '%');
})->paginate(3);//这个呢就是一个输入框里面输入手机号啊姓名啊都成查到所以用orwhere
详情的话就简单了:
public function show(User $user)
{
$user->a->b;
return $user;这就关联好了全部查处
}
基本上就这样以后在补点
图1: