【问题标题】:Eloquent saves missing attributes as empty strings instead of NULLsEloquent 将缺失的属性保存为空字符串而不是 NULL
【发布时间】:2014-04-02 01:15:36
【问题描述】:

当我尝试将具有缺失属性的模型保存到非 NULL 数据库字段时,我不希望应用程序对此保持沉默,我希望它发出强烈的尖叫声。但是 eloquent 保存的空字符串就很好了。

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

【问题讨论】:

  • 保存前验证。
  • 这是应用程序级别的保证,我希望数据库在数据完整性方面也能发挥作用。
  • 如果Laravel 将缺失值转换为空字符串,那么数据库将允许它,因为空值不是null
  • 这不是 Laravel,而是你的数据库。尝试运行查询SET GLOBAL sql_mode = 'STRICT_ALL_TABLES'; 并尝试再次使用MyModel::create([]);
  • @user3158900 将其放入答案中。现在!

标签: mysql laravel laravel-4 eloquent


【解决方案1】:
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;
            }
        }
    }
}

信用: Set fields to null instead of empty value to avoid problems with nullable foreign keys

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2021-10-18
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多