最近项目遇到一个问题,需要些一个收藏置顶功能,试了N种查询方式,DB,ORM,都没查出来,使用DB左链接查询,如果按照用户id来查询用户的收藏情况,那么只会显示用户的收藏,那些没收藏的就不会显示,使用ORM的一对多关系,那么就不能按照收藏时间来进行倒序,同样实现不了,机缘巧合下搜到一大神著作,才解决,记录一下
//主表门店,附表收藏表,按照附表用户id来搜索,那么只能查出用户为2的收藏数据以及门店数据,那没有收藏的不显示,
$list = DB::table('shop')->select('*')
->leftJoin('collect','shop.id', '=', 'collect.collect_id')
->where(['shop.type'=>1,'shop.status'=>1])
->where('collect.user_id',2)
->orderBy('collect_time','desc');
//下面的实现了按照用户来搜索,显示全部的门店数据,有收藏就显示,没收藏自动补全为空,完美实现
$list = DB::table('shop')->select('*')
->leftJoin('collect',function($join)use ($data){
$join->on('shop.id', '=', 'collect.collect_id')
->where('collect.user_id','=',0);
})->where(['shop.type'=>1,'shop.status'=>1])->orderBy('collect_time','desc');