Php 还原软删除实体会在“已删除”列中设置无效的时间戳

Php 还原软删除实体会在“已删除”列中设置无效的时间戳,php,mysql,laravel,laravel-4,Php,Mysql,Laravel,Laravel 4,我试图还原Laravel 4.2中的软删除实体,但它一直将列中的deleted_的时间戳设置为无效格式 它没有将其设置为NULL,而是将其设置为0000-00-00 00:00:00,从而阻止我实际还原软删除的实体,因为Laravel一直将其识别为已删除,因为该列不是空的 我也尝试过在属性处设置和不设置deleted\u的setter,但都不起作用 代码实际上非常简单:我提交了一个PUT请求以使列中已删除的_无效,这样用户就可以恢复,但没有成功 // Javascript $("#enable-

我试图还原Laravel 4.2中的软删除实体,但它一直将列中的
deleted_的时间戳设置为无效格式

它没有将其设置为
NULL
,而是将其设置为
0000-00-00 00:00:00
,从而阻止我实际还原软删除的实体,因为Laravel一直将其识别为已删除,因为该列不是空的

我也尝试过在
属性处设置和不设置
deleted\u的setter,但都不起作用

代码实际上非常简单:我提交了一个PUT请求以使列中已删除的_无效,这样用户就可以恢复,但没有成功

// Javascript
$("#enable-user").on('click', function (event) {
    var action = $(this).attr('action');

    swal({
        title: "Are you sure?",
        text: "Do you want to reactivate this user?",
        type: "warning",
        showCancelButton: true,
        html: true,
        cancelButtonText: "Cancel",
        confirmButtonText: "Continue",
        closeOnConfirm: false,
        closeOnCancel: true,
        showLoaderOnConfirm: true
    },
    function(isConfirm) {
        if (isConfirm) {
            $.ajax({
                type: 'PUT',
                url: action,
                headers: {
                    'X-CSRF-Token': $("input[name='_token']").attr('value')
                },
                data: {
                    deleted_at: null
                },
                success: function(data) {
                    sweetAlert("Sii!", "User re-activated successfully!", "success");
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    if (jqXHR.status === 401) {
                        sweetAlert("Oops...", jqXHR.responseJSON.message, "error");
                    } else {
                        sweetAlert("Oops...", "Something went wrong!", "error");
                    }
                }
            });
        }
    });
});
这是还原后数据库中显示的内容:


多亏了helloNL in#laravel IRC,问题才得以解决

显然,JavaScript的NULL在Laravel中不被识别,而是作为一个空字符串

因此,我必须从以下内容编辑我的模型设定器:

public function setDeletedAtAttribute($value)
{
    if ($value === NULL) {
        $this->attributes['deleted_at'] = null;
    } else {
        $this->attributes['deleted_at'] = $value;
    }
}
为此:

public function setDeletedAtAttribute($value)
{
    if ($value === NULL  || $value === "") {
        $this->attributes['deleted_at'] = null;
    } else {
        $this->attributes['deleted_at'] = $value;
    }
}

为什么不使用模型的
restore()
方法?我尝试了两种方法,
restore()
也不起作用。将来可能会出现问题。默认情况下,MySQL 5.7强制使用更严格的字段类型(MySQL模式的strict_TRANS_表),您仍然可以手动禁用这些字段类型。例如,时间戳永远不能为NULL,因为NULL不是日期。有关这方面的更多信息,请参见此处:
public function setDeletedAtAttribute($value)
{
    if ($value === NULL  || $value === "") {
        $this->attributes['deleted_at'] = null;
    } else {
        $this->attributes['deleted_at'] = $value;
    }
}