0

通过关系搜索(如WHERE name LIKE %acme%)字段值的正确程序是什么?

假设我们有一个Client模型 belongs_to Company。现在我想通过$client->company->name字段过滤(搜索)。

我试过了Client::where('company.name', 'LIKE', 'acme')->get();

但它不起作用...

我已经设置了急切的加载...$includes = array('company')

编辑:忘了提到我的关系正在运作......

谢谢!

4

3 回答 3

0

现在我有了更好的理解——Laravel 急切加载不使用 JOIN 查询,这与其他 ORM 方法不同,据说仍然可以使用 Fluent Query Builder 结构将 Eloquent 与 join 结合使用。因此,您将无法使用 Eloquent 按相关模型的值进行搜索。使用 Fluent 接口进行连接: http: //laravel.com/docs/database/fluent#joins

您仍然可以通过执行 Client::join( ... 来将流利的界面与您的 elequent 模型一起使用。对于这种功能,您应该查看类似 Doctrine 的东西。不过,请为更陡峭的学习曲线做好准备

于 2013-02-19T12:39:30.113 回答
0

尝试使用急切加载:

$client = Client::with(array('company' => function($query) {
    $query->where('name', 'LIKE', 'acme');
}))->first();
于 2013-02-19T12:22:15.763 回答
0

尝试这个

您可以通过在 eloquent 中使用 join 方法来实现。

Client::join('companies AS company', 'clients.company_id', '=', 'company.id')
       ->select('clients.*', 'company.name AS company_name')
       ->with('company')
       ->where(function($query) {
           $query->where('company_name', 'LIKE', 'acme');
       })
       ->get();

如您所见,我将公司表加入到客户中,以便在返回数据上有一个company_name 。因此,您可以轻松搜索公司名称为“acme”的客户。

于 2020-01-17T08:04:45.877 回答