2015-02-11 93 views
1

我如何在Laravel中執行此查詢?我想我正陷入糾結。Laravel子查詢

select * from `entries` 
where (`id` = (
    select entry_id FROM `elements` where `content` = 'David' 
)); 

我有一個進入模型和元模型,並渴望裝載工作正常(即,如果我不是做$entries = Entry::with('elements');它的偉大工程)。

我想抓住元素相關元素具有特定值的條目。

我試圖抓住所有的參賽作品,但只有元素,其中,查詢適合:

$entries = Entry::with(['elements' => function($q) use ($find){ 
    $q->where('content', '=', $find); 
}])->get(); 

回答

2

對於由相關的模型,你可以使用has()過濾。在這種情況下,因爲你必須申請條件,whereHas

$entries = Entry::with(['elements' => function($q) use ($find){ 
    $q->where('content', '=', $find); 
}]) 
->whereHas('elements', function($q) use ($find){ 
    $q->where('content', '=', $find); 
})->get(); 

這個現在只渴望加載相關模型匹配謂語,也肯定只會讓有至少一個相關模型,返回的條目。

爲了減少重複的代碼,你也可以把封閉在一個變量:

$filter = function($q) use ($find){ 
    $q->where('content', '=', $find); 
}; 

$entries = Entry::with(['elements' => $filter])->whereHas('elements', $filter)->get();