我有兩個表,tutorial:id,title
和tutorial_tags:id,tutorial_id,title
laravel ORM關係:LEFT JOIN像右表
在tutorial
模型的關係是這樣定義的可選的條件查詢:
function TutorialTag(){
return $this->hasMany('App\TutorialTag');
}
我想左連接tutorials
與tutorial_tags
,像(請忽略語法錯誤):
select tutorials.* , tutorial_tags.* from `tutorials` left Join
`tuotrial_tags` ON tutorials.id = tutorial_tags.tutorial_id
,但我希望能夠ŧ Ø如果用戶在tutorial_tags
使用條件要搜索一個特定的標籤:如果我使用whereHas這樣
select tutorials.* , tutorial_tags.* from `tutorials` left Join
`tuotrial_tags` ON tutorials.id = tutorial_tags.tutorial_id
where tutorial_tags.title = 'ABC'
:
$tutorials = Tutorial::whereHas('TutorialTag',function ($query){
if(isset($_GET['tag']))
$query->where('title',$_GET['tag']);
})->get();
我不明白這是沒有任何標記的教程,基本上它的工作原理是內部聯接。
,如果我使用with
:
$tutorials = Tutorial::with(['TutorialTag'=>function($query){
if(isset($_GET['tag']))
$query->where('title',$_GET['tag']);
}])->get();
然後生病得到兩個單獨的查詢與海誓山盟沒有影響,基本上就tutorial_tags
的where condition
對tutorials
沒有影響,我得到的所有的教程,包括那些沒有sreached標籤,這裏是查詢日誌:
Array
(
[0] => Array
(
[query] => select * from `tutorials`
[bindings] => Array
(
)
[time] => 0
)
[1] => Array
(
[query] => select * from `tutorial_tags` where `tutorial_tags`.`tutorial_id` in (?, ?, ?) and `title` = ?
[bindings] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => ABC
)
[time] => 2
)
)
我怎樣才能得到LEFT JOIN像右表與可選的條件查詢