2016-11-04 8 views
2

私は2つのテーブルを持っていました。ドライバとpart_time_available、私がpart_time_availableフィールドを表示するparttimeドライバタイプを選択すると。問題は私が保存することはできません。2テーブル1フォームLaravel

それは、このエラーがスローされます。整合性制約違反を:1048列「driver_idは」

nullにすることはできませんここで私のこれまでのコントローラのコードを保存します:

public function save(Request $request, $obj = null) { 

    if (!$obj) { 
     $obj = new Driver; 
    } 
    $obj->active = TRUE; 
    $obj->counter = 0; 
    return $this->saveHandler($request, $obj); 
} 

public function saveHandler(Request $request, $obj) 
{ 
    try { 
     DB::beginTransaction(); 
      $obj->fill($request->all()); 
      if (!$obj->save()) { 
       throw new ValidationException($obj->errors()); 
      } 
      foreach($request->parttimeAvailabilities as $pta) { 

       if (empty($pta['id'])) { 
        $parttimeAvailability = new ParttimeAvailability(); 
       } 
       else { 
        $parttimeAvailability = ParttimeAvailability::find($pta['id']); 
       } 
       $parttimeAvailability->Driver()->associate($obj); 
       $pta['driver_id'] = isset($pta['driver_id']) ? $pta['driver_id'] : null; 
       $driver = Driver::find($pta['driver_id']); 
       $parttimeAvailability->driver()->associate($driver); 
       $parttimeAvailability->day = $pta['day']; 
       $parttimeAvailability->start_time = $pta['start_time']; 
       $parttimeAvailability->end_time = $pta['end_time']; 
       $parttimeAvailability->available = isset($pta['available']); 
       $parttimeAvailability->save(); 
      }; 
      $obj->save(); 
      if (!$parttimeAvailability->save()) { 
       throw new ValidationException($parttimeAvailability->errors()); 
      } 
     DB::commit(); 
     return $this->sendSuccessResponse($request); 
    } catch (ValidationException $e) { 
     DB::rollback(); 
     \Log::error($e->errors); 
     return $this->sendErrorResponse($request, $e->errors); 
    } catch (Exception $e) { 
     DB::rollback(); 
     \Log::error($e->getMessage()); 
     return $this->sendErrorResponse($request,'Unable to process. Please contact system Administrator'); 
    } 

} 

を任意のアイデア?

+0

null値を 'driver_id'フィールドに挿入しようとしています。それがnullでないことを確認してください。 –

+0

は削除する必要がありますか? $ pta ['driver_id']:null;私のコードに? –

+0

また、そのフィールドにNULLを格納することもできます。 'のような空文字列を格納しますか? $ pta ['driver_id']: ''; ' –

答えて

1

はこちらをご覧ください:

  $pta['driver_id'] = isset($pta['driver_id']) ? $pta['driver_id'] : null; 
      $driver = Driver::find($pta['driver_id']); 

我々はdriver_idnullことができることがわかります。このコードの塊から。その場合、見つけるドライバはありません。 idを持っている場合は、ドライバを検索する必要があります。

+0

だから私はただ削除する必要があるという意味ですか? $ pta ['driver_id']:null; ? –

+0

driver_idを収集する必要がありますが、nullの場合は使用しないでください。if($ pta ['driver_id']!== null){/ * Your code * /} –

関連する問題