2017-04-23 10 views
0

私はVehicleControllerでこの機能を使用して、私のデータベース内の行を更新しようとしていますが、私は、入力フィールドに事前に入力はデータを取得していない:Laravelの行の更新、リクエストメソッド

public function editVehicle(Request $request, Vehicle $vehicle, Customer $customer) 
    { 

     if ($request->isMethod('post')) { 
      $this->validate($request, [ 
        'plate' => 'required', //plate is primary key <VARCHAR> 
        'cust_id' => 'required', //cust_id is foreign key <INTEGER> 
        'type' => 'required', 
        'brand' => 'required', 
        'year' => 'required', 
        'mileage' => 'required' 
      ]); 

      $this->vehiclesService->editVehicle($request, $vehicle); 

      return redirect()->route('Customers:detail', ['customer' => $customer]); 
     } 

     return view('vehicles.form', ['vehicle' => $vehicle]); 

    } 

それから私は、この機能を持つVehiclesServiceモデルを持っています:

<label>Plate number</label> 
<input type="text" value="@if(isset($vehicle)){{$vehicle->plate}} @endif" name="plate" id="plate" class="form-control" placeholder="Enter plate number, eg. 'PP123KL'"> 

車両を編集するための
public function editVehicle($request, $vehicle) 
    { 
     DB::transaction(function() use ($request, $vehicle) { 

      $vehicle->cust_id = $request->cust_id; 
      $vehicle->type = $request->type; 
      $vehicle->brand = $request->brand; 
      $vehicle->year = $request->year; 
      $vehicle->mileage = $request->mileage; 
      $vehicle->plate= $request->plate; 

      DB::update('update vehicles set cust_id=?, type=?, brand=?, year=?, mileage=? where plate=?', 
        [$vehicle->cust_id, $vehicle->type, $vehicle->brand, $vehicle->year, $vehicle->mileage, $vehicle->plate]); 

      Log::info('Vehicle updated.'); 

      flash('Vehicle successfully updated', 'success'); 
     }); 

    } 

そして、私のフォームは、(例えば、単に1つの入力フィールド)、このようになります。

車を作る機能がうまく動作します。車両を作成する際には、(テーブルvehicles)に割り当てられている顧客id(テーブルcustomers)を使用していますので、車両は特定の顧客に属しています。このようにして、cust_idは外部キーです。

私は外部キーを持たず、秘密鍵がidのタイプserial integerであり、この機能は完璧に機能する顧客(編集顧客)に似た機能を持っています。しかし、車ではplateと入力してvarcharを秘密鍵として使用しています。idと呼ばれていないので、PostgreSQLに問題があるかもしれないと思うのですが、この機能は動作しません。フォームはあらかじめ入力されていませんし、入力フィールドにいくつかのデータを入力して編集を保存しようとしても、データは保存されません - 車両はまったく編集されませんでした。

いずれにせよ、私はそれを修正しようと数時間を費やして、与えられた車両用のデータベースのデータがあらかじめ埋め込まれた編集フォームを手に入れましたが、運が全くありません。

UPDATE:

ルート:

Route::group(['prefix' => '/vehicles'], function() { 
     Route::match(['get'], '/{plate}/edit', 'Vehicles\[email protected]')->name('Vehicles:edit'); 
     Route::match(['post'], '/{plate}/editVehicle', 'Vehicles\[email protected]')->name('Vehicles:editVehicle'); 
}}; 

VehicleController:

public function edit(Request $request, $id) { 
     $vehicle = Vehicle::with(['customer'])->find($id); 
     return view('edit', compact('vehicle')); 
    } 

public function editVehicle(Request $request, Vehicle $vehicle) 
    { 
     if ($request->isMethod('post')) { 
      $this->validate($request, [ 
        'plate' => 'required', 
        'cust_id' => 'required', 
        'type' => 'required', 
        'brand' => 'required', 
        'year' => 'required', 
        'mileage' => 'required' 
      ]); 

      $this->vehiclesService->editVehicle($request, $vehicle); 

      return redirect()->route('Customers:detail', ['customer' => $vehicle->customer]); 
     } 

     return view('vehicles.form', ['vehicle' => $vehicle]); 

    }   

答えて

0

私はあなたの問題はあなたのコントローラであなたの編集の車両機能であると信じています。

あなたはどの車両を編集する車両を選択していますか?あなたのコントローラーはフルビークルオブジェクトと完全な顧客オブジェクトを期待しています。実際にGETリクエストでそれらを渡すことはできません。

あなたは本当にあなたのGETのために別のコントローラを持っている必要があります。

public function edit(Request $request, $id) { 
    $vehicle = Vehicle::with(['customer'])->find($id); 
    return view('edit', compact('vehicle')); 
} 

次に、あなたのビューで適切なモデルを持っています。モデルを使用するようにビューを設定します。次に、既存のルートを更新して編集するようにします。これで、そのコントローラにモデルを渡すことができます。

2番目のパラメータとしてCustomerを渡す必要はありません。あなたは車を保存した後、リダイレクトに$ vehicle-> customerを使うことができます。

DBステートメントを使用して保存する理由もわかりません。ちょうど$ vehicle-> save();を使ってください。

+0

'http:// localhost:8000/vehicles/KK134IL/editVehicle'を使用しています。ここで' KK134IL'はプレート番号 – Ady96

+0

です。あなたが提供したコードで私の質問を更新しましたが、 :7エラー:列車番号.idは存在しません 行1: "車両"から "*車両"、 "id" = $ 1の制限1を選択してください。それは顧客のIDですか? – Ady96

関連する問題