私は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');
}
}
を任意のアイデア?
null値を 'driver_id'フィールドに挿入しようとしています。それがnullでないことを確認してください。 –
は削除する必要がありますか? $ pta ['driver_id']:null;私のコードに? –
また、そのフィールドにNULLを格納することもできます。 'のような空文字列を格納しますか? $ pta ['driver_id']: ''; ' –