在我的控制器中,我有以下代码:
//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
。
我有什么想念的吗?我编码错了吗?
答案 0 :(得分:4)
尝试使用嵌套的预先加载。有点像:
$user = User::with([
'products' => function ($query) use ($date) {
$query->where('created_at', $date);
},'products.order' =>function ($query) use ($order) {
$query->orderBy($order, 'desc');
}
])->get();
答案 1 :(得分:2)
根据您的描述,两种方法应该运作良好。
是否有一些范围在->orderBy()
模型中使用User
,因此带有闭包的orderBy()
会混淆。
dd($query->toSql())
可能对您有所帮助。
答案 2 :(得分:1)
我通过在select * from students where name ilike 'hahid%'
条件中添加闭包来解决问题。
where()