Php 如何确保在保存到Laravel时将“已删除”字段设置为空?

Php 如何确保在保存到Laravel时将“已删除”字段设置为空?,php,laravel,laravel-5,Php,Laravel,Laravel 5,使用SoftDeletingTrait保存对象时,我的数据库字段“deleted_at”总是设置为“0000-00-00 00:00:00”,而不是空值。我正在使用最新的Laravel 5.0版本 我的目标: use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\SoftDeletingTrait; class Entity extends Eloquent{ use

使用SoftDeletingTrait保存对象时,我的数据库字段“deleted_at”总是设置为“0000-00-00 00:00:00”,而不是空值。我正在使用最新的Laravel 5.0版本

我的目标:

use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Eloquent\SoftDeletingTrait;


class Entity extends Eloquent{

    use SoftDeletingTrait;

    protected $fillable = array('title');

}
我的保存呼叫:

public function store(Request $request)
{
    $entity = new Entity;
    try{
        $data = ['title' => 'Test'];
        $entity->fill($data);
        $entity->save();
    } catch(\Exception $e) {
        echo $e->getMessage();
    }
}

数据库中的“deleted_at”字段允许空值,所以这不是问题所在。查询模型时,它不会检索记录,因为该字段不为null。如何更改此设置?

您有两种方法:

或者在数据库中将deleted_设置为null(作为默认值)->reconcanded


或者你可以做一些像
$data=['title'=>'Test','deleted_at'=>NULL]

默认值可能不正确。在您的
模式中设置了软删除功能的适当列,如下所示:

$table->softDeletes();

如果您想利用
Carbon
date功能,还应手动将deleted_at列添加到dates属性中:

class Entity extends Eloquent {
    use SoftDeletingTrait;
    // add this line:
    protected $dates = ['deleted_at'];
    //
    protected $fillable = array('title');
}

(Laravel的4.1->4.2升级文档声明您必须这样做,但软删除显然不需要这样做。)

它允许空值,但这是默认值吗?表的
模式是什么样子的?请编辑您的问题,将实体表的模式/迁移包括在内。我认为这不是真的
$dates
告诉Laravel在访问这些属性时,哪些项目将变成
对象(它添加了方便的日期处理),但软删除不需要这样做。我刚刚检查了一个带有软删除功能的模型(L4.2),没有设置
$dates
,它工作正常。然后,4.1-4.2升级文档当前状态为“您还必须手动将
deleted\u at
列添加到您的
dates
属性中”,如果实际上没有必要对
deleted\u
进行碳化,则应该更改。在很短的一段时间内,
deleted\u at
被包含在自动碳化的日期数组中(以及
created\u at
updated
at
),但当重新引入
$dates`属性时,这一点发生了变化。但您是对的,将其添加到
$dates
似乎并不要求软删除才能正常运行。编辑了将“must”更改为“should”的答案。在Laravel 5.2中,如果没有
预计的$dates=['deleted\u at']
,我无法创建一个雄辩的对象并将deleted\u at另存为null。谢谢,出于某种奇怪的原因,我的表得到了默认值“0000-00-00:00:00”,即使启用了NULL。。必须确保设置了NULL(作为选项)和NULL(作为默认值)。谢谢你的帮助!