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 모델이 없다 :

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'"> 
,

차량을 만드는 기능이 잘 작동합니다. 차량을 만들 때 id (표 customers)을 cust_id (표 vehicles)에 할당하여 차량이 지정된 고객에게 속한 차량을 사용하고 있습니다. 이렇게하면 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 요청에 전달할 수는 없습니다.

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

그런 다음 당신이보기에 적절한 모델을해야합니다 :

당신은 정말 GET에 대한 별도의 컨트롤러가 있어야

. 모델을 사용하도록보기를 설정하십시오. 그런 다음 컨트롤러에 전달할 모델을 갖게되므로 편집을 위해 기존 경로를 업데이트하십시오.

고객을 두 번째 매개 변수로 전달할 필요가 없습니다. 차량을 저장했으면 리디렉션에 $ vehicle-> customer를 사용할 수 있습니다.

왜 DB 문을 사용하여 저장하는지 잘 모르겠습니다.그냥 $ vehicle-> save();를 사용하십시오.

+0

'http : // localhost : 8000/vehicles/KK134IL/editVehicle'을 사용하고 있습니다. 여기서'KK134IL'은 플레이트 번호입니다 – Ady96

+0

제공 한 코드로 제 질문을 업데이트했지만'Undefined column : 7 오류 : 열차 차량 .id가 존재하지 않습니다. LINE 1 : "차량", "차량", "id"= $ 1 제한 1 '을 선택하십시오. 그것은 고객'id'입니까? – Ady96