Php 还原软删除实体会在“已删除”列中设置无效的时间戳
我试图还原Laravel 4.2中的软删除实体,但它一直将列中的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-
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;
}
}