我有一个带8种方法的控制器。其中七个人使用这个陈述:
$item = Item::findOrFail($id);
但是,只有一个人需要不同的查询:
$item = Item::with('subitem')->findOrFail($id);
我想为这些方法的前七个定义一个路由模型绑定,但是,有没有办法以某种方式告诉Laravel对于最后一个方法我想要注入ID而不是Item类的实例?目前我正在做以下事情,但非常糟糕:
$item = Item::with('subitem')->findOrFail($item->id);
答案 0 :(得分:0)
是的,只有通过更改用于模型绑定的路径中的参数名称才能轻松完成,例如,为什么不在您使用的路径中使用$item
(或类似的东西)需要模型绑定,以便您可以将模型绑定到包含$item
参数的路由,例如:
Route::post('items/{item}', 'ItemController@update');
将模型绑定到路由时,请使用以下内容:
public function boot(Router $router)
{
parent::boot($router);
$router->model('item', 'App\Item');
}
因此,当找到item
参数作为路由参数时,Item
模型将被绑定,但对于需要ID
的路由,请使用类似此路由的声明(使用id
作为参数):
Route::post('items/{id}', 'ItemController@whatever');
在ItemController@whatever
方法中,您将从路线获取ID:
public function whatever($id)
{
// $id would be an integer value for $id not a model
}