[英]How to convert sql to Laravel Eloquent
有特定的 SQL 查詢需要轉換為 Laravel eloquent,我已經轉換得到錯誤,請大家幫助我嗎?
我的數據庫
select
`d1`.*, `a1`.`user_uuid` as `activity_user`
from
`directors` as `d1`
left join
`activities` as `a1`
on `a1`.`entity_uuid` = `d1`.`uuid`
and `a1`.`created_at` = (
select
max(`created_at`)
from
`activities` as `a2`
where `a2`.`entity_uuid`=`d1`.`uuid`
)
where `a1`.`user_uuid`='4f858f46-2d7e-41c8-a185-c9c4a4b506d1'
group by `a1`.`entity_uuid`
order by `d1`.`updated_at`
desc limit 100;
和我的 laravel 雄辯
DB::table('directors')
->select('directors.*')
->leftJoin('activities',function($join) {
$join->on('a1.entity_uuid','=','directors.uuid')
->on('a1.created_at','=',function($query) {
$query->from('activities')
->select(DB::raw('max'('activities.created_at'))
->where('activities.entity_uuid','=',DB::raw('d1.uuid'));
});
}
->where('activities.user_uuid','=','4f858f46-2d7e-41c8-a185-c9c4a4b506d1')
->groupBy('activities.entity_uuid')
->orderBy('directors.updated_at','desc')
->get();
我得到的錯誤
TypeError: stripos(): Argument #1 ($haystack) must be of type string, Closure given in file C:\xampp\htdocs\crmMembers\backend\vendor\laravel\framework\src\Illuminate\Database\Grammar.php on line 62
謝謝大家,解決了
只需將 double ->on 更改為 ->where 即可完美運行
->where('a1.created_at', '=', function($q){$q->from('activities as a2')
->select(DB::raw('max(`a2`.`created_at`)'))
->where('a2.entity_uuidm', '=', DB::raw('`d1`.`uuid`'));
});
你的 Laravel 數據庫查詢應該是這樣的
DB::table('directors')->select('directors.*', 'activities.user_uuid as activity_user')
->leftJoin('activities',function($join) {
$join->on('a1.entity_uuid','=','directors.uuid')
->on('a1.created_at','=',function($query) {
$query->from('activities')
->select(DB::raw('max(created_at)')
->where('activities.entity_uuid','=',DB::raw('d1.uuid'));
});
})
->where('activities.user_uuid','=','4f858f46-2d7e-41c8-a185-c9c4a4b506d1')
->groupBy('activities.entity_uuid')
->orderBy('directors.updated_at','desc')
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.