雄辩,寻找关系

时间:2013-02-19 12:07:53

标签: php laravel eloquent

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

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

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

但它不起作用......

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

编辑:忘记提及我的关系正在发挥作用......

谢谢!

3 个答案:

答案 0 :(得分:0)

尝试使用预先加载:

$client = Client::with(array('company' => function($query) {
    $query->where('name', 'LIKE', 'acme');
}))->first();

答案 1 :(得分:0)

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

您仍然可以通过Client :: join(....使用流畅的界面与您的elequent模型 你应该看看像Doctrine这样的功能。尽可能为更陡峭的学习曲线做好准备

答案 2 :(得分:0)

尝试

您可以通过雄辩地使用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();

如您所见,我已将companies表加入到客户端,以在返回数据上具有 company_name 。因此,您可以轻松地搜索公司名称为“ acme”的那些客户。