2017-02-27 86 views
0

我有一個模型Foo,其中包含hasManyBar的關係。Laravel:查詢是否存在關係

我有類似以下的查詢:

$r = Foo::with(['bar' => function($query) { 
    $query->where('someProp', '=', 10); 
})->get() 

不過,我只想返回Foo對象,如果項目有Bar對象滿足查詢。

我知道,你可以做這樣的事情:

$r = Foo::has('bar') 
    ->with(['bar' => function($query) { 
     $query->where('someProp', '=', 10); 
    })->get(); 

但是,檢查是否有任何bar項目存在。若一個bar項目與someProp = 10

我有一個解決方案最接近的存在是這樣的:

$r = Foo::has('bar') 
    ->whereHas('bar', function ($query) { 
     $query->where('someProp', '=', 10); 
    }) 
    ->with(['bar' => function($query) { 
     $query->where('someProp', '=', 10); 
    })->get(); 

但它顯然不是一個很好的解決方案,可能是非常低效的,因爲我是在重複的查詢。

我該如何解決這個問題?

回答

2

如果條件是固定的,你可以這樣定義

public function bar_fix() 
{ 
    return $this->hasMany(Bar::class)->where('someProp', 10); 
} 

Foo中另一關係,然後在查詢中使用這種關係:

$r = Foo::has('bar_fix')->with('bar_fix')->get(); 
然而

,這僅僅是有用的如果條件解決..