记录一下使用左关联的一次查询(可乐的笔记)

记录一下使用左关联的一次查询

情景描述:

有两个表,一个为users表,一个为库存表:user_storage。两者是一(users)对多(user_Storage)。查出users中等级为3的用户,对应的库存总量并从大到小排序,没有默认为0

那面对这种情况,我的想法就是分组求和:
我第一次写的是:

User::leftJoin('user_storage','users.id','user_storage.user_id')
    ->where('users.level',3)
    ->select('users.id','users.mobile',DB::raw("ifnull(sum(user_storage.num) ,0) as total"))
    ->orderByDesc('total')->take(10)->skip(0)->get();

第一次写的是可以正常查出来的:在user_storage表中不存在的用户用0表示出来了。
但是当我加上条件后:

->where('user_storage.storage_type',0)

加上一句条件后发现user_storage表中不存在用户没有查出来。查了一下文档,发现使用下面的方式是可以查询出来的。(ps:顺便查了下,说使用Eloquent ORM的模型关联也可以实现,不过没有找到具体的实现方法,如君愿教,感激不尽。)

User::leftJoin('user_storage',function($q){
    $q->on('users.id','user_storage.user_id')
      ->where('user_storage.storage_type',0);
})
->where('users.level',3)
->select('users.id','users.mobile',DB::raw("ifnull(sum(user_storage.num) ,0) as total"))
->orderByDesc('total')->take(10)->skip(0)->get();

(当使用左关联时,外部的条件会限制查询范围,使其效果如同Join一样,使用函数闭包的形式,可以限制作用范围)

本作品采用《CC 协议》,转载必须注明作者和本文链接
我爱大可乐
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!