【问题标题】:Eloquent - nullable date column returned as 0000-00-00Eloquent - 返回为 0000-00-00 的可空日期列
【发布时间】:2021-09-21 08:18:41
【问题描述】:

我遇到了 Eloquent 模型的问题。我的数据库列定义为

date_to date null

迁移中也定义为nullable()

当我选择一个数据库记录(使用查询生成器或直接通过find($id))时,Eloquent 始终将$model->date_to 的值返回为0000-00-00(在MySQL 中,此列正确设置为NULL) .

我错过了什么吗?我对 Eloquent 没有那么丰富的经验。


这是我的模型:

<?php

use Illuminate\Database\Eloquent\Model;

class MyModel extends Model
{
    protected $table = 'table_name';
    public $timestamps = false;

    protected $fillable = [
        'member_id',
        'date_from',
        'date_to',
    ];

    protected $dates = [
        'date_from',
        'date_to',
    ];

}

表结构:

create or replace table table_name
(
    id bigint unsigned auto_increment
        primary key,
    member_id int not null,
    date_from date null,
    date_to date null,
)
charset=utf8;



更新

作为我使用的临时修复:


public function getDateToAttribute($value)
{
    if ($value == '0000-00-00') {
        return null;
    }
    return $value;
}

public function getDateFromAttribute($value)
{
    if ($value == '0000-00-00') {
        return null;
    }
    return $value;
}

【问题讨论】:

  • 你可能在Model的protected $dates变量中添加了字段
  • @UrjaSatodiya 是的,我已将它添加到这个受保护的数组中。但一开始并没有设置在$dates数组中,结果不幸的是一样。
  • 能分享一下相关的eloquent模型吗?
  • @Sevan 我已经用模型定义更新了我的帖子
  • @mkrowiarz 你注意到那个日期字段的发布请求数据了吗?

标签: laravel eloquent


【解决方案1】:
protected $casts = [
    'date_from' => 'date:Y-m-d',
    'date_to' => 'date:Y-m-d',
];

你有没有试过像上面那样casting

【讨论】:

  • 是的,没有任何变化。当我调用$model-&gt;date_to 时,它会返回一个带有无效日期的 Carbon 实例。
  • 能否提供 MySQL 表的结构?顺便问一下,您使用的是哪个版本的 Laravel?
  • 当然,用表格结构更新了我的帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2015-07-19
  • 1970-01-01
  • 2018-12-19
相关资源
最近更新 更多