【发布时间】:2017-04-23 19:19:44
【问题描述】:
我正在尝试使用VehicleController 中的此函数更新我的数据库中的一行,但我在输入字段中没有预填充数据:
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这个功能的模型:
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');
});
}
我用于编辑车辆的表单(例如只有一个输入字段)如下所示:
<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'">
创建车辆的功能可以正常工作。当我创建车辆时,我使用分配给cust_id(来自表vehicles)的客户id(来自表customers),因此车辆属于给定的客户。这样,cust_id 就是外键。
我对没有任何外键的客户(编辑客户)有类似的功能,它的私钥是id,输入serial integer,这个功能很完美。但是在车辆中,我使用plate,输入varchar 作为私钥,这让我认为Postgresql 可能有问题,因为它没有被称为id,所以这个功能不起作用。表格没有预先填写,即使我尝试在输入字段中输入一些数据并保存编辑,数据也没有保存 - 车辆根本没有被编辑。
无论哪种方式,我都花了几个小时试图修复它,并让我的编辑表单预先填充了给定车辆数据库中的数据,但一点运气都没有。
更新:
路线:
Route::group(['prefix' => '/vehicles'], function () {
Route::match(['get'], '/{plate}/edit', 'Vehicles\VehicleController@edit')->name('Vehicles:edit');
Route::match(['post'], '/{plate}/editVehicle', 'Vehicles\VehicleController@editVehicle')->name('Vehicles:editVehicle');
}};
车辆控制器:
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]);
}
【问题讨论】:
标签: php postgresql laravel request query-builder