Laravel:如何检查模型字段在数据库中是否可为空

Ale*_*ldi 2 php laravel eloquent laravel-5

null保存时我将所有空字段设置为

使用OctoberCMS模型事件beforeSave(相当于Laravel模型保存)

public function beforeSave()
{
    // $this => the model
    foreach ( $this->toArray() as $name => $value )
    {
         if ( empty( $value ) ) {
                 $this->{$name} = null;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是当字段具有在数据库(mysql)上定义的默认值时,例如:

$table->integer('value')->default(1);
Run Code Online (Sandbox Code Playgroud)

我需要获得当前模型的所有可空或不可空字段的数组.

这是怎么回事?

jed*_*ylo 5

Laravel/Eloquent对数据库的结构一无所知.假设您实现的任何操作,数据库结构都为它们做好了准备.

您可以查询数据库以获取有关列的信息.对于MySQL,你需要运行

show columns from <table_name>;
Run Code Online (Sandbox Code Playgroud)

这将导致向数据库发送其他查询.

一个更好的选择,在我看来,是到了这样的信息存储在模型类,例如在

protected $notNullable = ['field1', 'field2'];
Run Code Online (Sandbox Code Playgroud)

以类似于$ fillable$ guarded字段的方式存储.在编写模型时,您应该知道哪些列是哪些列nullable,哪些列不是,因此它应该是最简单的解决方案.