首页 > 解决方案 > Laravel 中多个条件的多次急切加载

问题描述

我正在使用 Laravel 5.7 版本。

我想使用带有 where 子句的多个急切加载。

我简化了 laravel。

$query = Employee::with(['User','Company','Client'])
                  ->select(*)->whereRaw("(User.id <> 0 and Company.name LIKE %A%) OR Client.id <> 0)")

我正在使用急切加载来避免 JOIN 语句。

但问题是错误消息说 User.id is unknown column in where 子句。

我相信另外两个也是未知的列。

任何想法,将不胜感激。

标签: phplaraveleloquent

解决方案


它看起来有点难看,但你可以使用闭包:

$query = Employee::with('User', function ($inner) {
    $inner->where('id', '!=', 0);
})->with(['Company', 'Client'])
->where(function (Builder $sub) use($companyName) {
    $sub->where('Company.name', 'like', $companyName)
        ->orWhere('Client.id', '!=', 0);
})->get();

这将检索:

employees where (user.id != 0 AND (company.name LIKE :companyName OR client.id != 0))

为了修改这些约束的顺序,您需要根据您的要求移动闭包和约束,但据我所知,这应该这样做。


推荐阅读