Eloquent where table with table

时间:2014-01-30 17:04:22

标签: laravel-4

我有一个Quote Eloquent模型,它有几个关系,其中一个是Customer。我正在编写一个搜索控制器,它接受一个查询,然后搜索模型。如果我不需要搜索自定义关系,我可以轻松地执行此操作:

$Quote = Quote::where('trashed', '0'); // Never get trashed items.
$Quote->where('item', 'LIKE', '%'.$searchQuery.'%');

努力享受。

但是,如果我想搜索所有报价,而是按客户名称搜索:

$Quote = Quote::where('trashed', '0'); // Never get trashed items.    
$Quote = $Quote->with(['Customer' => function($Query) use ($searchQuery) {
    $Query->where('e_mail', 'LIKE', '%'.$searchQuery.'%');
}]);

所有这一切都在说“加入名称为$searchQuery的客户。如果我将where子句移到with方法之后,则无法访问e_mail字段。

那么如何搜索报价,但客户与其他东西相等呢?

2 个答案:

答案 0 :(得分:0)

试试这个:

$Quote = Quote::with(['Customer' => function($Query) use ($searchQuery) {
             $Query->where('e_mail', 'LIKE', '%'.$searchQuery.'%');
         }])->where('trashed', '0')->where('item', 'LIKE', '%'.$searchQuery.'%');  

答案 1 :(得分:0)

我设法使用whereHas代替with并使用查询来解决此问题。

$Quote = Quote::whereHas('customer', function($Query) use($searchQuery) {
    $Query->where('e_mail', 'LIKE', '%'.$searchQuery.'%');
});

排序!