$ object-> fill(post())不使用OctoberCMS中的空白日期输入

时间:2017-01-27 17:53:37

标签: php octobercms

我有一个包含一些日期类型输入的表单:

<input name="some_date" type="date" />

这些字段不是必需的,可以保持不变,因此some_date字段设置为&#34; nullable&#34;在数据库中。以下是plugins/acme/plugin/updates/中迁移文件的行:

$table->date('some_date')->nullable();

问题在于,当我尝试使用Eloquent的fill()方法和OctoberCMS的post()帮助程序保存表单数据时,我得到SQL告诉我我有一个&# 34;日期值不正确:&#39;&#39;&#34;。

$object = new SomeObject();
$object->fill(post());
$object->save();

当然,我知道空字符串是一种无效的格式,但是不应该这样做吗? post()不应该照顾这个吗?或者是否需要传入额外的设置/ var?

否则我只需要遍历post()并自己处理空蜇。有点乱。

1 个答案:

答案 0 :(得分:1)

第二个想法,使用array_filter()不是一个好主意。

如果您的模型具有像is_active = false这样的虚假值的属性,该怎么办?

$data = post();

if(is_array($data) && count($data)){

    $data = array_filter($data);
    $object = new SomeObject();
    $object->fill($data);
    $object->save();

}

// $data  = [
//    'some_date' => ''       // false
//    'is_active' => false   // Will be filtered out
// ];

我能想到的方式;

使用模型中的Nullable Trait

class MyModel extends Model
{
    use \October\Rain\Database\Traits\Nullable;

    protected $nullable = ['some_date'];
}

现在,如果some_date = '',它将无效。

使用beforeValidate()beforeSave()模型事件并检查some_date是否为空字符串并手动将其设置为NULL

public function beforeValidate()
{

    if(empty($this->some_date)){

        $this->some_date = null;

    }

}

在模型中定义Mutator方法并操纵属性的值:

protected $dates = ['some_date'];

public function setSomeDateAttribute($value)
{

    if(empty($value)){
        $this->attributes['some_date'] = null;
    }  else  {
        $this->attributes['some_date'] = $value;
    }

}