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

Jef*_*ama 8 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();
Run Code Online (Sandbox Code Playgroud)

在这两种方法中,只读取查询的第一个条件.

我想在急切加载的数据中过滤1个 where()子句和1 子句orderBy.

有什么我错过的吗?我编码错了吗?

Nis*_*tha 6

尝试使用嵌套的急切加载。就像是:

$user = User::with([
    'products' => function ($query) use ($date) {
            $query->where('created_at', $date);
        },'products.order' =>function ($query) use ($order) {
            $query->orderBy($order, 'desc');
        } 
    ])->get();
Run Code Online (Sandbox Code Playgroud)


Jef*_*ama 1

我通过给条件添加一个闭包来解决这个问题where()

$user = User::with([
    'products' => function ($query) use ($date, $order) {
        $query->where(function ($q) use ($date, $order) {
            $q->where('created_at', $date); //This can accept more where() condition
        })->orderBy($order,'DESC');
    }])->get();
Run Code Online (Sandbox Code Playgroud)