Eloquent将缺失的属性保存为空字符串而不是NULL

4

当我试图将一个缺失属性的模型保存到非空的数据库字段时,我不想让应用程序保持沉默,我希望它大声呼喊。但是Eloquent保存空字符串就很好。

为什么MyModel::create([])会成功?


在保存之前进行验证。 - The Alpha
确实,这就是让我困惑的地方,我不希望Laravel将其转换为空字符串 - 这就是所谓的静默失败。糟糕。糟糕。糟糕。 - Daniel Birowsky Popeski
该死。我怎么能安心睡觉呢。。 - Daniel Birowsky Popeski
2
不是 Laravel 的问题,而是你的数据库。尝试运行查询 SET GLOBAL sql_mode = 'STRICT_ALL_TABLES'; 并再次尝试使用 MyModel::create([]); - user1669496
1
@user3158900 把它放在答案里。现在! - Daniel Birowsky Popeski
显示剩余3条评论
1个回答

0
class BaseModel extends Eloquent {

    public static function boot()
    {
        parent::boot();

        static::creating(function($model) {
            static::setNullWhenEmpty($model);
            return true;
        });
    }

    private static function setNullWhenEmpty($model)
    {
        foreach ($model->toArray() as $name => $value) {
            if (empty($value)) {
                $model->{$name} = null;
            }
        }
    }
}

版权:将字段设置为null而不是空值,以避免可空外键的问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接