2017-02-27 2 views
0

hasManyBarの関係を持つモデルFooがあります。Laravel:関係が存在するかどうかの問い合わせ

私は、次のようなクエリをしている:しかし、私は、アイテムがクエリを満たすBarを目的としている場合にのみFooオブジェクトを返すようにしたい

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

は、私はあなたがこのような何かを行うことができますことを承知している:

$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

条件は修正1である場合、あなたはこの

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

のようなFooの中の別の関係を定義し、クエリで、この関係を使用することができます。

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

しかし、これは単なる便利です条件が修正されている場合。

関連する問題