-
使用
whereColumn()
方法
实现两个字段相等的查询结果
;
//判断两个相等的字段,同样支持 orWhereColumn()
//支持符号'create_time','>', 'update_time'
//支持符号支持数组多个字段格式['create_time','>', 'update_time']
$users = DB::table('users')
->whereColumn('create_time', 'update_time')
->get();
-
使用
orderBy()
方法
实现 desc 或 asc 排序
功能。
//支持 orderByRaw 和 orderByDesc 倒序方法
$users = DB::table('users')
->orderBy('id', 'desc')
->get();
-
使用
latest()
方法设置
时间倒序来排
,默认时间字段是 created_at;
//按照创建时间倒序排,默认字段 created_at
$users = DB::table('users')->latest('create_time')->toSql();
-
使用
inRandomOrder()
方法来随机排序,得到一个
随机列表
;
//随机排序
$users = DB::table('users')->inRandomOrder()->get();
-
使用
skip()
和
take()
限制结果集,或使用
offset()
和
limit()
;
take= limit , skip = offset
//从第 3 条开始,显示 3 条
$users = DB::table('users')->skip(2)->take(3)->toSql();
$users = DB::table('users')->offset(2)->limit(3)->get();
-
使用
when()
方法可以设置
条件选择
,执行相应的 SQL 语句;
//when 实现条件选择
$users = DB::table('users')->when(true, function ($query) {
$query->where('id', 19);
}, function ($query) {
$query->where('username', '辉夜');
})->get();
-
如果 MySQL 在 5.7+,有支持
JSON 数据
的新特性;
$users = DB::table('users')->where('list->id', 19)->first();
-
也可以使用
leftjoin
左连接或
rightjoin
右连接实现
多表查询
;
$users = DB::table('users')
->leftJoin('books', 'users.id', '=', 'books.user_id')
->rightjoin('profiles', 'users.id', '=', 'profiles.user_id')
->get();
-
使用
crossjoin
交叉连接查询,会生成笛卡尔积
,再用
distinct()取消重复
;
$users = DB::table('users')
->crossJoin('books')
->select('username', 'email')
->distinct()
->get();
-
如果你想要
实现闭包查询
,和 where 类似,只不过要用 on 和 orOn 方法;
$users = DB::table('users')
->join('books', function ($join) {
//支持 orOn 连缀
$join->on('users.id', '=', 'books.user_id');
})->toSql();
//PS:on()方法后面如果想要再增加筛选条件,可以追加 where();
-
使用
joinSub
实现子连接查询
,将对应的内容合并在一起输出;
//子连接查询
$query = DB::table('books')->selectRaw('user_id,title');
$users = DB::table('users')->joinSub($query,'books', function ($join) {
$join->on('users.id', '=', 'books.user_id');
})->get();
-
使用
union()
或
unionAll()
方法
实现两个查询的合并
操作;
//union 取消重复,unionAll 不取消重复
$query = DB::table('users');
$users = DB::table('users')
->union($query)
->get();
-
使用
update()
方法,可以
通过条件更新一条数据
内容;
//更新修改一条数据
DB::table('users')
->where('id', 304)
->update([
'username' => '李红',
'email' => 'lihong@163.com'
]);
-
使用
updateOrInsert()
方法,可以
先进行查找修改,如不存在,则新增
;
//参数 1:修改的条件
//参数 2:修改的内容(新增的内容)
DB::table('users')->updateOrInsert(
['id'=>307],
['username'=>'李黑', 'password'=>'654321', 'details'=>'123']
);
-
对于
json 数据
,新增和修改的方法和正常数据类似;
//新增时,转换为 json 数据
'list' => json_encode(['id'=>19])
//修改时,使用 list->id 指定
DB::table('users')->where('id', 306)
->update([
'list->id' => 20
]);
-
更新数据时,可以使用
自增
increment()
和
自减
decrement()
方法;
//默认自增/自减为 1,可设置
DB::table('users')->where('id', 306)->increment('price');
DB::table('users')->where('id', 306)->increment('price', 2);