laravel 5在eager load上查询多个约束

时间:2016-11-29 05:59:01

标签: php laravel laravel-5 laravel-5.2

在我的控制器中,我有以下代码:

//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

我有什么想念的吗?我编码错了吗?

3 个答案:

答案 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()