記錄一下使用左關聯的一次查詢
情景描述:
有兩個表,一個為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 協議》,轉載必須註明作者和本文連結