【问题标题】:A four digit year could not be found Data missing save condition找不到四位数年份 数据缺少保存条件
【发布时间】:2017-03-24 18:22:25
【问题描述】:

这是我的面试表格“YYYY-MM-DD”中的 start_date 字段格式。

问题是当我没有填写 start_date 字段时我无法保存。

到目前为止,这是我的保存处理程序代码:

public function saveHandler(Request $request, $obj)
{
    try {
        DB::beginTransaction();
        $obj->fill($request->all());
        $obj->start_date = isset($interviewTracks['start_date']) ? $interviewTracks['start_date'] : 'YYYY-MM-DD';
        if (!$obj->save()) {
            throw new ValidationException($obj->errors());
        }
            foreach($request->interviewTracks as $interviewTracks) {
                if (empty($interviewTracks['id'])) {
                    $interviewTracks = new InterviewTrack();
                }
                else {
                    $interviewTracks = InterviewTrack::find($interviewTracks['id']);
                }
                $interviewTracks->interview()->associate($obj);
                $interviewTracks['interview_id'] = isset($interviewTracks['interview_id']);
                $interviewTracks->status = $interviewTracks['status'];
                $interviewTracks->track_date = isset($interviewTracks['track_date']) ? $interviewTracks['track_date'] : 'YYYY-MM-DD';
                $interviewTracks->outcome = $interviewTracks['outcome'];
                $interviewTracks->remarks = $interviewTracks['remarks'];
                $interviewTracks->save();
            };
            if (!$interviewTracks->save()) {
                throw new ValidationException($interviewTracks->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');
    }

}

有什么想法吗?

【问题讨论】:

  • 我想你在数据库中的 start_date 是'DATE'类型,但是当你没有填写日期时,你会尝试插入一个字符串YYYY-MM-DD
  • 如果您的数据库中的 start_date 字段是字符串,则不会有问题。您的字段是什么列类型?
  • @AbdouTahiri 日期类型
  • @VitaliiSrimbanuis 是的,它是 DATE 类型,有什么办法可以“欺骗”它吗?

标签: php laravel


【解决方案1】:

您应该将start_date 列默认设置为nullable(),因此如果您想保留 start_date,则可以将其保留,Eloquent 会自动在此处填充 null。在您的迁移中使用它来将其设置为可空...

// Example - Just for Demo
Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->date('start_date')->nullable(); // <-------- This field sets to nullable by default
    $table->timestamps();
});

希望这会有所帮助!

【讨论】:

  • 除了使用迁移并将其设置为可空,有什么办法可以“欺骗”它吗?
  • @AndrewVanusi - 我认为您不能,而是可以输入0000-00-00 并在您的逻辑中将其视为空日期。应该尝试一次。
【解决方案2】:

默认情况下,Laravel 5.3 对 MySQL 使用严格模式。

如果您想恢复此行为,请更新您的 config/database.php 文件并设置

'strict' => false

【讨论】:

    猜你喜欢
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2011-01-02
    • 2017-12-11
    • 2020-03-19
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多