Php Laravel:如何检查数据库上的模型字段是否为空
保存时,我将所有空字段设置为Php Laravel:如何检查数据库上的模型字段是否为空,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,保存时,我将所有空字段设置为null 在保存之前使用OctoberCMS模型事件(相当于Laravel模型保存) 问题在于字段在数据库(mysql)上定义了默认值,例如: $table->integer('value')->default(1); 我需要得到当前模型的所有可为空或不可为空字段的数组 如何做到这一点?Laravel/Eloquent对数据库的结构一无所知。假设无论您实现什么操作,数据库结构都已为它们做好准备 您可以查询数据库以获取有关列的信息。对于MySQL您需要运行
null
在保存之前使用OctoberCMS模型事件(相当于Laravel模型保存)
问题在于字段在数据库(mysql)上定义了默认值,例如:
$table->integer('value')->default(1);
我需要得到当前模型的所有可为空或不可为空字段的数组
如何做到这一点?Laravel/Eloquent对数据库的结构一无所知。假设无论您实现什么操作,数据库结构都已为它们做好准备
您可以查询数据库以获取有关列的信息。对于MySQL您需要运行
show columns from <table_name>;
以类似的方式存储字段,如$filled或$guarded。当您编写模型时,您应该知道哪些列是可为空的,哪些不是,因此这应该是最简单的解决方案。将此添加到您的模型或特性中
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 );
}
和使用一样
app(Model::class)->is_nullable(you_column_name)
亲爱的下层选民,请留下评论,我很想知道答案有什么问题:)哦,对不起。为了解决这个问题,我只需设置protected$notNullables=['foo','bar']
并在循环中创建条件。很好。
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 );
}
app(Model::class)->is_nullable(you_column_name)