通过关系搜索字段值的正确程序(如WHERE name LIKE %acme%
中)是什么?
假设我们有Client
模型,其属于Company
。现在我想通过$client->company->name
字段过滤(搜索)。
我试过了Client::where('company.name', 'LIKE', 'acme')->get();
但它不起作用......
我已经急切地加载了设置...... $includes = array('company')
谢谢!
答案 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”的那些客户。