2016-09-23 87 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()默认情况下将返回单个模型。