2016-09-23 83 views
1
  • 經理hasOne供應商
  • 供應商的hasMany菜單

而像這樣我的路線:與laravel關係的Sql的最佳途徑?

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

我已經寫這樣的查詢:

$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; 

我不不知道這個寫的原始的Sql,但它似乎查詢美奈時間, 是否有任何方式獲得最佳效果?

+0

你可以創建一個包裝函數,只能調用 – madalinivascu

+0

爲什麼你需要經理,如果你有供應商ID? – madalinivascu

回答

1

你可以簡化代碼,因爲它是等價的:

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

findOrFail()將返回一個錯誤,如果給定的供應商無法找到的呼叫。 其中有將確保相關經理具有正確的狀態,並且find()默認情況下將返回單個模型。