2015-06-12 2 views
1

У меня есть контроллер с 8 способами. Семь из них используют это заявление:Laravel route model binding только для одного маршрута

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

Однако только один нужен другой запрос:

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

Я хотел бы определить модель маршрута связывания для первых семи из этих методов, однако, есть способ как-то сказать Laravel, что для последнего метода я хочу, чтобы ID вводился вместо экземпляра класса Item? В настоящее время я делаю следующее, но его очень плохо:

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

ответ

0

Да, вы можете сделать это легко, только изменив имя параметра в маршруте, который используется для связывания модели, например, почему бы не использовать $item (или что-то в этом роде) на маршрутах, по которым вы должны модели связывания, так что вы можете связать модель с маршрутами, который содержит $item параметра, например:

Route::post('items/{item}', '[email protected]'); 

при привязке модели к маршруту, использовать что-то вроде этого:

public function boot(Router $router) 
{ 
    parent::boot($router); 

    $router->model('item', 'App\Item'); 
} 

Так, onle когда item параметра найден в качестве параметра маршрута, модель Item будет связана, но и для маршрута, который нуждается в ID, декларации использование маршрут как этот (используя id в качестве параметра):

Route::post('items/{id}', 'Item[email protected]'); 

В способе [email protected] вы получите идентификатор с маршрута:

public function whatever($id) 
{ 
    // $id would be an integer value for $id not a model 
} 
+0

Спасибо, что ответили. Хотя это не так элегантно, как я выдохся. Кажется, я больше не буду использовать привязку маршрутной модели, это слишком основательно. –

Смежные вопросы