Laravel 5 LARAVEL 5如何将空DateTime输入存储为空值而不是0000:00:00值

Laravel 5 LARAVEL 5如何将空DateTime输入存储为空值而不是0000:00:00值,laravel-5,laravel-5.3,Laravel 5,Laravel 5.3,我有两个输入日期时间字段。 用户可以选择填写这两个字段中的任何一个。 对于空的输入日期时间字段,我希望它在数据库中存储为空值。 但当前空的输入日期时间字段存储为数据库中的0000:00:00值。我应该修改什么代码?当属性为空时,可以使用模型观察者在保存之前取消设置属性。但请确保字段可以为空 class Flight extends Model { public static function boot() { parent::boot(); se

我有两个输入日期时间字段。 用户可以选择填写这两个字段中的任何一个。 对于空的输入日期时间字段,我希望它在数据库中存储为空值。
但当前空的输入日期时间字段存储为数据库中的0000:00:00值。我应该修改什么代码?

当属性为空时,可以使用模型观察者在保存之前取消设置属性。但请确保字段可以为空

class Flight extends Model
{
    public static function boot()
    {
        parent::boot();

        self::saving(function ($flight_model) {

            if(empty($flight_model->arriveDateTime)) unset($your_model->attributes['your_date_field1'];
            if(empty($flight_model->departDateTime)) unset($your_model->attributes['your_date_field2'];

        });

    }
}
这将是一个很好的参考

更新 要在控制器中执行限制,您将使用doc.s中所述的控制器

验证中的字段必须存在,并且只有在所有其他指定字段都不存在时才不能为空 要使用它,我们将添加新规则,如

如果您已经在使用规则,只需将这两个角色附加到它们。这是控制器验证部分

对于视图部分,我假设您有两个输入,分别是
id=“arriveDateTime”
id=“departDateTime”
代码如下

$(函数(){
$('#arriveDateTime')。on('change',function(){
if($(this.val()=''){
$('departDateTime').prop(“disabled”,false);
}否则{
$('departDateTime').prop(“disabled”,true);
}
});
$('#departDateTime')。on('change',function(){
if($(this.val()=''){
$('arriveDateTime').prop(“disabled”,false);
}否则{
$('arriveDateTime').prop(“disabled”,true);
}
});
});

当属性为空时,可以使用模型观察者在保存之前取消设置属性。但请确保字段可以为空

class Flight extends Model
{
    public static function boot()
    {
        parent::boot();

        self::saving(function ($flight_model) {

            if(empty($flight_model->arriveDateTime)) unset($your_model->attributes['your_date_field1'];
            if(empty($flight_model->departDateTime)) unset($your_model->attributes['your_date_field2'];

        });

    }
}
这将是一个很好的参考

更新 要在控制器中执行限制,您将使用doc.s中所述的控制器

验证中的字段必须存在,并且只有在所有其他指定字段都不存在时才不能为空 要使用它,我们将添加新规则,如

如果您已经在使用规则,只需将这两个角色附加到它们。这是控制器验证部分

对于视图部分,我假设您有两个输入,分别是
id=“arriveDateTime”
id=“departDateTime”
代码如下

$(函数(){
$('#arriveDateTime')。on('change',function(){
if($(this.val()=''){
$('departDateTime').prop(“disabled”,false);
}否则{
$('departDateTime').prop(“disabled”,true);
}
});
$('#departDateTime')。on('change',function(){
if($(this.val()=''){
$('arriveDateTime').prop(“disabled”,false);
}否则{
$('arriveDateTime').prop(“disabled”,true);
}
});
});

你所需要的就是有说服力的突变子

下面是一个简化的示例,基本上来自

进一步的
我假设您的日期时间格式类似于
yyyy-mm-dd hh:ii:ss

您所需要的只是有说服力的变体

下面是一个简化的示例,基本上来自

进一步的
我假设您的日期时间格式类似于
yyyy-mm-dd hh:ii:ss

您可以使用laravel mutators。这是一张出生日期表

公共函数setDob($value)
{
$this->attributes['dob']=strlen($value)?Carbon::createFromFormat('d/m/Y',$value):null;

}
您可以使用laravel变异子。这是一张出生日期表

公共函数setDob($value)
{
$this->attributes['dob']=strlen($value)?Carbon::createFromFormat('d/m/Y',$value):null;

}
您好,谢谢您的回复,但我还是不太清楚。这是我的航班模型,包含arriveDateTime、departDateTime、destination和备注字段。允许用户填写arriveDateTime或departDateTime。那么如何在我的飞行模型中编码呢?班机扩展模型{…}??你还没有模型?我还没有模型是什么意思?我有飞行模型。我使用的是Laravel 5.3简短的回答是“不在控制器和视图中执行”。第一条评论中提到的是一种逻辑,它与作为数据的数据无关。这是关于如何控制用户的行为,我会在使用JS的视图中这样做,允许用户通过禁用另一个字段只填充一个字段。并验证控制器中的数据。嗨,谢谢你的回复,但我还是不太清楚。这是我的航班模型,包含arriveDateTime、departDateTime、destination和备注字段。允许用户填写arriveDateTime或departDateTime。那么如何在我的飞行模型中编码呢?班机扩展模型{…}??你还没有模型?我还没有模型是什么意思?我有飞行模型。我使用的是Laravel 5.3简短的回答是“不在控制器和视图中执行”。第一条评论中提到的是一种逻辑,它与作为数据的数据无关。这是关于如何控制用户的行为,我会在使用JS的视图中这样做,允许用户通过禁用另一个字段只填充一个字段。以及验证控制器中的数据。这不是Laravel上变异器的正确模式,而是必须设置DobAttribute($value)这不是Laravel上变异器的正确模式,而是必须设置DobAttribute($value)
class User extends Model
{
    /* Set or mutate value of property */
    public function setDateInputAttribute($value)
    {
        $this->attributes['date_input'] = $this->dateTimeOrNull($value);
    }

    /* This method should get another place, because it's not the core of this model */
    private function dateTimeOrNull($value)
    {
        /* 
           Check if given datetime is valid. Yes? Return original $value
           For simplicity, I use PHP's DateTime class
        */
        if (DateTime::createFromFormat('Y-m-d H:i:s', $value) !== false) {
            return $value;
        }

        /* Datetime is not valid. Return null */
        return null;
    }
}