2014-01-30 5 views
0

У меня есть Quote Красноречистая модель, которая имеет несколько отношений, одна из которых - Customer. Я пишу контроллер поиска, который берет запрос, а затем ищет модели. Если мне не нужно искать по пользовательским отношениям, я могу легко сделать это:Eloquent where clause on with table

$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 поля

Так как я искать цитаты, но там, где клиент равно что-то другое

ответ

0

мне удалось решить эту проблему с помощью whereHas вместо with, с запросом.

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

Отсортировано!

0

Попробуйте это.?:

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

Почти. Это возвращает клиентов, связанных только с кавычками, которые имеют соответствующую информацию. Мне нужны «Цитаты», чьи «Клиенты» имеют эти письма. – James

+0

Я установил свой код таким образом: '$ Quote = Quote :: with (['Customer' => function ($ Query) use ($ searchQuery) { \t \t \t $ Query-> где ('e_mail ',' LIKE ','% '. $ SearchQuery.'% '); \t \t}]) -> где (' trashed ', 0) -> orderBy (' created_at ',' desc '); 'но это не выполнив часть 'e_mail'. – James