【问题标题】:How can I make sure my deleted_at field gets set to NULL on save in Laravel?如何确保我的 deleted_at 字段在 Laravel 中保存时设置为 NULL?
【发布时间】:2014-12-19 03:28:17
【问题描述】:

使用 SoftDeletingTrait 保存我的对象时,我的数据库字段“deleted_at”总是设置为“0000-00-00 00:00:00”而不是 NULL 值。我正在使用最新的 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 值,所以这不是问题。查询模型时,它不会检索记录,因为该字段不为空。我该如何更改?

【问题讨论】:

  • 允许空值,但那是默认值吗?你的Schema 在桌子上是什么样子的?
  • 请编辑您的问题以包括您的实体表的架构/迁移。

标签: php laravel laravel-5


【解决方案1】:

如果您想利用 Carbon 日期功能,您还应该手动将 deleted_at 列添加到您的日期属性:

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

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

【讨论】:

  • 我认为这不是真的。 $dates 告诉 Laravel 在访问这些属性时将哪些项目转换为 Carbon 对象(通过它添加的方便的日期处理),但软删除不需要工作。我刚刚在一个带有软删除且没有设置$dates 的模型中检查了(L4.2),它工作正常。
  • 如果实际上不需要碳化deleted_at,则应更改当前声明“您还必须手动将deleted_at 列添加到dates 属性”的4.1-4.2 升级文档.在短时间内,deleted_at 被包含在自动碳化的日期数组中(连同created_atupdatedat), but that was changed when the $dates` 属性被重新引入。但你是对的,将其添加到$dates 似乎不是软删除功能的要求。
  • 编辑答案以将“必须”更改为“应该”。
  • 在 Laravel 5.2 中,如果没有 projected $dates = ['deleted_at'],我无法创建 Eloquent 对象并将 deleted_at 保存为 null。
【解决方案2】:

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

$table->softDeletes();

【讨论】:

  • 谢谢,由于某种奇怪的原因,我的表得到了默认值 '0000-00-00 00:00:00',即使启用了 NULL。必须确保两者都是 NULL(作为选项)和 NULL(作为默认值)在哪里设置。感谢您的帮助!
【解决方案3】:

你有两种方法:

您要么在数据库中将 deleted_at 专门设置为 null(作为默认值)-> RECOMANDED

或者你可以做类似$data = ['title' => 'Test', 'deleted_at' => NULL];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2019-01-29
    相关资源
    最近更新 更多