Eloquent\model 注入方法 returns null
Eloquent\model injection into method returns null
我在使用注入 Eloquent 到控制器方法中获取模型时遇到问题 - 它找不到使用 URL 中的 id 的模型。
我记得我在其他控制器中进行了更改
DB::setFetchMode(PDO::FETCH_ASSOC);
dd($infrastructure) returns 只是关于模型的元数据:
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' => 'InfrastructureController@showInfrastructureLogs'
]);
resource('infrastructuretype', 'InfrastructureTypeController');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
});
在您的路由文件中,将 Route::model('infrastructure', 'App\Infrastructure');
更改为 Route::bind('infrastructure', 'App\Infrastructure');
。
您的 Route::resource 定义了具有复数名称的通配符,这将使通配符 'infrastructures'.
您正在将 'infrastructure' 通配符绑定到模型,这仅适用于您的 showInfrastructureLog 方法。
您可以在控制台中使用此命令来显示每个资源的完整路径:
php artisan route:list
您可以通过更改
轻松解决此问题
Route::model('infrastructure', 'App\Infrastructure');
到
Route::model('infrastructure', 'App\Infrastructure');
(我个人从未使用 Route::model 进行模型绑定,总是从 RouteServiceProvider 进行,但我认为它有效)
同时将'infrastructure/{infrastructure}/logs'中的通配符改为'infrastructures'
我不知道为什么它停止工作但正在运行
php artisan route:clear
php artisan route:cache
成功了。
我在使用注入 Eloquent 到控制器方法中获取模型时遇到问题 - 它找不到使用 URL 中的 id 的模型。 我记得我在其他控制器中进行了更改
DB::setFetchMode(PDO::FETCH_ASSOC);
dd($infrastructure) returns 只是关于模型的元数据:
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' => 'InfrastructureController@showInfrastructureLogs'
]);
resource('infrastructuretype', 'InfrastructureTypeController');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
});
在您的路由文件中,将 Route::model('infrastructure', 'App\Infrastructure');
更改为 Route::bind('infrastructure', 'App\Infrastructure');
。
您的 Route::resource 定义了具有复数名称的通配符,这将使通配符 'infrastructures'.
您正在将 'infrastructure' 通配符绑定到模型,这仅适用于您的 showInfrastructureLog 方法。
您可以在控制台中使用此命令来显示每个资源的完整路径:
php artisan route:list
您可以通过更改
轻松解决此问题Route::model('infrastructure', 'App\Infrastructure');
到
Route::model('infrastructure', 'App\Infrastructure');
(我个人从未使用 Route::model 进行模型绑定,总是从 RouteServiceProvider 进行,但我认为它有效)
同时将'infrastructure/{infrastructure}/logs'中的通配符改为'infrastructures'
我不知道为什么它停止工作但正在运行
php artisan route:clear
php artisan route:cache
成功了。