私は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]);
}
'http:// localhost:8000/vehicles/KK134IL/editVehicle'を使用しています。ここで' KK134IL'はプレート番号 – Ady96
です。あなたが提供したコードで私の質問を更新しましたが、 :7エラー:列車番号.idは存在しません 行1: "車両"から "*車両"、 "id" = $ 1の制限1を選択してください。それは顧客のIDですか? – Ady96