LaravelモデルPurhaseOrder
とPurchaseOrdersController
メソッド付きのコントローラーがありますshow
インタージャーを使用してメソッドをタイプキャストした場合:
public function show(int $purchaseOrder)
{
dd(PurchaseOrder::find($purchaseOrder));
}
次にdd()
、私が期待するものをダンプします(IDが$ PurchaseOrderと一致するデータベース内のレコード)
ただし、代わりにこれを行う場合:
public function show(PurchaseOrder $purchaseOrder)
{
dd($purchaseOrder);
}
次に$purchaseOrder
、空のモデルであり、データベースからのデータは入力されていません。私のルートは次のようになります:
Route::get('purchase-orders/{purchase_orders}/show', ['as' => 'admin.purchase-orders.show', 'uses' => 'PurchaseOrdersController@show']);
これは私が継承したコードであり、Laravel5.3からLaravel5.6に更新しようとしています。モデルが正しく入力されないというこの問題を解決するには、どこを探す必要がありますか?
暗黙的なモデルバインディングでは、変数名をルートパラメータ名と一致させる必要があります。たとえば、次のメソッドの場合です。
public function show(PurchaseOrder $purchaseOrder)
{
dd($purchaseOrder);
}
ルートには、一致するパラメータ名が含まれている必要があります。次に例を示します。
Route::get('purchase-orders/{purchaseOrder}/show', [
'as' => 'admin.purchase-orders.show',
'uses' => 'PurchaseOrdersController@show'
]);
内のメソッドのパラメータ名、ということに注意してくださいshow
している方法$purchaseOrder
とルートパラメータ名{purchaseOrder}
そうしないと、結合明示的にモデルをしなければならない、同じであり、それが結合暗黙のモデルのための要件の両方、あなたが明示的にあなたについての枠組みを教えてきましたパラメータ名、たとえば(in RouteServiceProvider
):
public function boot()
{
parent::boot();
Route::model('purchase_orders', App\PurchaseOrder::class);
}
これ{purchase_orders}
により、ルートで使用可能なパラメーター名がある場合、PurchaseOrder
モデルのインスタンスをそのルートの指定されたメソッドに解決/バインドすることがフレームワークに通知されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加