2016-09-23 5 views
1
  • マネージャーhasOneのベンダー
  • ベンダーhasManyのメニュー

そして、このように私のルート:ラヴェル関係を持つSQLの最良の方法は?

$vendor = manager::where('status','>',0) 
    ->with(['vendor' => function($query) use ($vid) { 
     $query->where('id',$vid); 
    }])->first()->vendor()->first(); 

    $menu= $vendor->menu()->where('id',$id)->first(); 

    return $menu; 

Iドン:私はすでにこのようなクエリを書いた

Route::get('vendor/{vid}/menu/{id}', '[email protected]'); 

`tこれが書かれて元のSQLを知っているが、それはクエリのようだマナエ時間、 は、最高の効果を得るための方法ですか?

+0

ラッパー関数を作成して、 – madalinivascu

+0

と呼ぶだけで、ベンダーIDがあればマネージャーが必要なのはなぜですか? – madalinivascu

答えて

1

それは相当だとしてあなたは、コードを簡略化することができます:

$menu = vendor::whereHas('manager', function($q) { 
    $q->where('status', '>', 0); 
})->findOrFail($vid)->menu()->find($id); 

findOrFail(への呼び出しを)与えられたベンダーが見つからない場合はエラーを返します。 ここでは、関連するマネージャのステータスが正しいことを確認し、find()はデフォルトで単一のモデルを返します。

関連する問題