首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel:如何检查模型字段在数据库中是否为空

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

Stack Overflow用户
提问于 2015-08-15 20:30:31
回答 2查看 5K关注 0票数 2

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

使用OctoberCMS模型事件beforeSave (等效于Laravel模型保存)

代码语言:javascript
复制
public function beforeSave()
{
    // $this => the model
    foreach ( $this->toArray() as $name => $value )
    {
         if ( empty( $value ) ) {
                 $this->{$name} = null;
         }
    }
}

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

代码语言:javascript
复制
$table->integer('value')->default(1);

我需要得到当前模型中所有可空或不可空字段的数组。

怎么做的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-15 22:13:55

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

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

代码语言:javascript
复制
show columns from <table_name>;

这将导致附加查询发送到数据库。

在我看来,更好的选项是将此类信息存储在模型类中,例如

代码语言:javascript
复制
protected $notNullable = ['field1', 'field2'];

以类似的方式存储、$fillable、$guarded字段。当您编写模型时,您应该知道哪些列是nullable,哪些列不是,所以这应该是最简单的解决方案。

票数 5
EN

Stack Overflow用户

发布于 2020-01-24 08:22:04

将此添加到您的模型或特性中

代码语言:javascript
复制
use DB;
...
    protected static $_columns_info = NULL;
    protected static $_nullable_fields = NULL;
    public function is_nullable(string $field_name){
        if (is_null(static::$_columns_info) ){
            static::$_columns_info = DB::select('show columns from '.$this->gettable() );
        }
        if (is_null(static::$_nullable_fields) ){
            static::$_nullable_fields = array_map( function ($fld){return $fld->Field;}, array_filter(static::$_columns_info,function($v){return $v->Null=='YES';}));
        }
        return in_array( $field_name, static::$_nullable_fields );
    }

并使用类似的

代码语言:javascript
复制
app(Model::class)->is_nullable(you_column_name)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32029067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档