【发布时间】:2017-04-13 00:42:00
【问题描述】:
在我的控制器中,我有以下代码:
//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 在急切加载的数据中被过滤。
有什么我错过的事情吗?是不是我写错了?
【问题讨论】:
-
@Veerendra nope,请仔细阅读标题。
-
首先,您的第一种和第二种方法具有相同的意义,只是编写的模式不同。其次,您甚至没有尝试过两种方法中的第二个 where 子句。请使用您为第二个 where 子句尝试过的代码发布代码。请参考示例 $users = User::with(array( 'posts' => function($query, $title) { $query->where('title', '=', $title); }, 'posts .tags' => function($query) { $query->where('tag_type', '=', 'admin') } ))->get();
-
拼写错误,已完成更新。此外,您的示例代码看起来与我想要实现的不同。
-
这应该 100% 工作。您能否检查您的 MySQL 日志或原始 SQL 以确认正在构建什么查询?
标签: php laravel laravel-5 laravel-5.2