2016-07-27 3 views
1

У меня проблема с выборкой модели с использованием инъецированного Eloquent в метод контроллеров - он не находит модель, использующую id в URL. я помню, что я изменил в другой контроллерEloquent model injection in method возвращает null

DB::setFetchMode(PDO::FETCH_ASSOC); 

дд ($ инфраструктура) возвращает только метаданные о модели:

Infrastructure {#257 ▼ 
#table: "infrastructures" 
#fillable: array:10 [▶] 
#connection: null 
#primaryKey: "id" 
.... 
} 

Мой контролеры метод:

public function show(Infrastructure $infrastructure) 
{ 

    $card = []; 
    $card['name'] = $infrastructure->name; 
    $card['id'] = $infrastructure->id; 
    $card['type'] = "infrastructure"; 
    $card['items']['manufacturer'] = $infrastructure->manufacturer; 
    $card['items']['type'] = $infrastructure->infrastructuretype()->first()- >name; 
    $card['items']['kind'] = $infrastructure->kind()->first()->name; 
    $card['items']['serial'] = $infrastructure->serial; 
    $card['items']['more info'] = Crypt::decrypt($infrastructure->long_desc); 

    $title = 'Infrastructure details '; 

    $warranty_left = $infrastructure->warranty_date > $infrastructure->purchase_date ? (new Carbon($infrastructure->warranty_date))->diffInDays(new Carbon($infrastructure->purchase_date)) : 0; 

    return view('infrastructure.show', compact('infrastructure', 'card', 'title')); 
} 

Мои маршруты:

Route::model('infrastructure', 'App\Infrastructure'); 


Route::group(['middleware' => 'auth'], function() { 
Route::resource('infrastructure', 'InfrastructureController'); 
get('infrastructure/{infrastructure}/logs', [ 
    'uses' => '[email protected]' 
]); 
resource('infrastructuretype', 'InfrastructureTypeController'); 


Route::get('auth/logout', 'Auth\[email protected]'); 

});

ответ

0

Я понятия не имею, почему это перестало работать, но ruuning

php artisan route:clear 
php artisan route:cache 

работал.

0

На вашем маршруте смена файла Route::model('infrastructure', 'App\Infrastructure'); на Route::bind('infrastructure', 'App\Infrastructure');.

+0

нет, все тот же –

0

Ваш ресурс Route :: resource определяет шаблон с множественными именами, который будет создавать подстановочные «инфраструктуры».

Вы привязываете подстановочный шаблон «инфраструктуры» к модели, которая будет работать только для вашего метода showInfrastructureLog.

Вы можете использовать эту команду в консоли, чтобы показать каждый ресурс полный путь:

php artisan route:list 

Вы можете легко исправить, изменив

Route::model('infrastructure', 'App\Infrastructure'); 

Для

Route::model('infrastructure', 'App\Infrastructure'); 

(I Я никогда лично не использовал модель Route :: model для привязки к модели, всегда делал это из RouteServiceProvider, но я предполагаю, что она работает)

изменить также подстановочные в «инфраструктуры/{инфраструктуры}/журналы» в «инфраструктур»

+0

я не понимал какое изменение к чему. Вы писали на тех же строках. –

+1

Маршрут :: модель ('инфраструктуры', 'App \ Infrastructure'); должно быть, второе, мое плохое – Shipupi