在Laravel 5中,在急加载中查询多个限制条件。
在Laravel 5中,在急加载中查询多个限制条件。
在我的控制器中,我有以下代码:
//Example Data; $date = Carbon::now(); $order = 'name'; // it can be by name, id or created_at; // Approach i try for getting data of user with eager loaded products //1st approach $user = User::with([ 'products' => function ($query) use ($date, $order) { $query->where('created_at', $date)->orderBy($order, 'desc'); }, ])->get(); //2nd approach $user = User::with([ 'products' => function ($query) use ($date, $order) { $query->where('created_at', $date); $query->orderBy($order, 'desc'); }, ])->get();
在这两种方法中,只读取了查询的第一个条件。
我想要在急切加载的数据中过滤1个where()
子句和1个orderBy
子句。
我有什么遗漏了吗?我写错了吗?
admin 更改状态以发布 2023年5月21日
问题在于你的orderBy是在“子查询”中进行的。当laravel进行连接(这就是贪婪加载),orderBy对你不是相关的。
我认为一个有用的解决方案是在查询之外使用orderby子句,使用laravel提供的别名。
$user = User :: with([
'products' => function($query)use($date,$order){
$query-> where('created_at',$date)-> orderBy($order,'desc');
},
])-> orderBy(“$ laravel_join_generated_alias $ order”,'desc')-> get();
其中$laravel_join_generated_alias
,您可以使用debugbar来检查此字符串将如何工作。