Chr*_*ish 3 php laravel laravel-5
我有一个Laravel模型PurhaseOrder和一个PurchaseOrdersController带方法的控制器show
如果我用一个整数来对方法进行类型转换:
public function show(int $purchaseOrder)
{
dd(PurchaseOrder::find($purchaseOrder));
}
Run Code Online (Sandbox Code Playgroud)
然后转dd()出我所期望的(数据库中id匹配$ purchaseOrder的记录)
但是,如果相反,我这样做:
public function show(PurchaseOrder $purchaseOrder)
{
dd($purchaseOrder);
}
Run Code Online (Sandbox Code Playgroud)
然后$purchaseOrder是一个空模型,并没有填充数据库中的任何数据.我的路线看起来像这样:
Route::get('purchase-orders/{purchase_orders}/show', ['as' => 'admin.purchase-orders.show', 'uses' => 'PurchaseOrdersController@show']);
Run Code Online (Sandbox Code Playgroud)
这是我继承的代码,我正在尝试从Laravel 5.3更新到Laravel 5.6.我应该在哪里寻找解决此模型未正确填充的问题?
The*_*pha 11
隐式模型绑定要求您将变量名称与路径参数名称匹配,例如,对于以下方法:
public function show(PurchaseOrder $purchaseOrder)
{
dd($purchaseOrder);
}
Run Code Online (Sandbox Code Playgroud)
路由应包含匹配的参数名称,例如:
Route::get('purchase-orders/{purchaseOrder}/show', [
'as' => 'admin.purchase-orders.show',
'uses' => 'PurchaseOrdersController@show'
]);
Run Code Online (Sandbox Code Playgroud)
请注意,在方法参数名show的方法是$purchaseOrder和路由参数名称{purchaseOrder}都是相同的,这就是在隐式模型结合的要求,否则,你必须做一个明确的模型绑定,在那里你已经明确地告诉框架你参数名称,例如(in RouteServiceProvider):
public function boot()
{
parent::boot();
Route::model('purchase_orders', App\PurchaseOrder::class);
}
Run Code Online (Sandbox Code Playgroud)
这将告诉框架,如果{purchase_orders}路由中有可用的参数名称,则将PurchaseOrder模型实例解析/绑定到该路由的给定方法中.