2015-11-25 4 views
11

SomeModel::with('user')のようなものを実行すると、Query\Builderインスタンスが返されます。 with()または同様の)を呼び出すことなくこのインスタンスを取得するにはどうすればよいですか?モデルから直接クエリビルダをインスタンス化する

たとえば、私はそれを試しました:new SomeModelしかし、それは明らかに私のモデルのインスタンスを返しますが、クエリビルダー(は私には役に立たない)のインスタンスを返します。 SomeModel::getQueryも私のモデルに関連していないQuery\Builderを返すので、機能しません。

いくつかの条件に基づいてセットアップする必要があります。だから、最初はそれはそれのように、される必要があります:

$someBuilder = SomeModel::getQueryBuilder(); // eg. 

if(condition()) { 
    $someBuilder->where(...); 
} 

$someResults = $someBuilder->get(); 
+0

'getQuery'メソッドは、あなたのモデルに関連したビルダーを返します。 –

答えて

25

静的queryメソッドを使用しますまた、あなたが上に直接チェーンにこれらの条件文をwhen方法を使用することができます

$query = User::query(); 

をクエリビルダー自体:

$results = SomeModel::query()->when(condition(), function ($query) { 
    $query->where(...); 
})->get(); 

これは機能的には命令語ifの節と同等です。

関連する問題