仅为一条路线的Laravel路线模型绑定

时间:2015-06-12 08:34:35

标签: php laravel laravel-5

我有一个带8种方法的控制器。其中七个人使用这个陈述:

$item = Item::findOrFail($id);

但是,只有一个人需要不同的查询:

$item = Item::with('subitem')->findOrFail($id);

我想为这些方法的前七个定义一个路由模型绑定,但是,有没有办法以某种方式告诉Laravel对于最后一个方法我想要注入ID而不是Item类的实例?目前我正在做以下事情,但非常糟糕:

$item = Item::with('subitem')->findOrFail($item->id);

1 个答案:

答案 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
}