2016-10-26 8 views
0

Это может быть вопрос для начинающих, но в моем приложении Laravel я не совсем понимаю. Я использую id на маршрутах, и я пытаюсь сделать laravel автоматически извлечения соответствующих объектов в БД. Он хорошо работает для некоторых моделей: В маршрутизацией:Параметры автоматического определения маршрута Laravel

Route::get('/project/{project}', '[email protected]'); 

и в контроллере

public function useProject(Request $request, Project $project) 

и после того, что у меня есть «проект» извлекается из БД

protected 'attributes' => 
    array (size=2) 
     'id' => int 9 
     'name' => string 'test' (length=4) 
    ... 
public 'exists' => boolean true 

В другой части кода, где я использую одну и ту же структуру маршрутизации на другой модели, автоматическое решение, похоже, не происходит

Routing:

Route::get('/build/{testscenario}','[email protected]'); 

Контроллер:

public function create(Request $request, TestScenario $scenario){ 

И результат:

protected 'attributes' => 
    array (size=0) 
     empty 
    ... 
    public 'exists' => boolean false 

Обе модели используют столбец "ID" в качестве первичного ключа. Что мне не хватает?

Большое спасибо за помощь!

+0

Вы пытаетесь сделать привязку модели маршрута? см. это для примера https://scotch.io/tutorials/cleaner-laravel-controllers-with-route-model-binding –

ответ

0

Вы пытаетесь использовать неявное связывание модели, поэтому я бы рекомендовал прочитать это section from the documentation.

Вы должны соответствовать имена переменных:

Route::get('/build/{testscenario}','[email protected]'); 

И в контроллере:

public function create(Request $request, TestScenario $testscenario){ 
+0

Да, я нашел проблему вскоре после публикации вопроса. Глупая ошибка :) Но спасибо за помощь! – Ours

0

Ah nevermind. Нашел решение. Это проблема с именами.

Route::get('/build/{testscenario}','[email protected]'); 

И

public function create(Request $request, TestScenario $scenario){ 

Параметры должны иметь такое же имя (то есть либо "testscenario" или "сценарий").

0

Согласно модели связывания правил, вы должны иметь такое же имя для сегмента и вашего instance.For Подробнее https://laravel.com/docs/5.2/routing#route-model-binding

Так что ваши маршруты и контроллер будет Route::get('/build/{testscenario}','[email protected]'); public function create(Request $request, TestScenario $testscenario)

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