我该如何在Laravel MongoDB中实现软删除?(Laravel 5.3)

3

我从这里获取了参考资料:https://github.com/jenssegers/laravel-mongodb#examples

我的模型是这样的:

<?php
namespace App\Models;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent; 
use Jenssegers\Mongodb\Eloquent\HybridRelations;
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
class Message extends Eloquent
{
    use HybridRelations; 
    use SoftDeletes; 
    protected $connection = 'mongodb';
    protected $dates = ['deleted_at'];
    protected  $fillable = ['subject', 'information', 'created_at', 'update_at'];
}

我的插入代码如下:

Message::create([
    'subject'       => $subject,
    'information'   => $information,
    'created_at'    => Carbon::now(),
    'updated_at'    => Carbon::now(),
    'deleted_at'    => null
]);

我试图运行代码,成功将其插入表中,但我找不到已删除的deleted_at字段。

如何在laravel mongodb上正确实现软删除?


我认为如果您添加 SoftDeletes trait,它应该会为您处理所有事情。这是 Eloquent 通常做的事情。 - apokryfos
MongoDB有数据库模式的概念吗?我认为它没有,所以只要你保持一致,你目前正在做的应该就足够了。 - apokryfos
Mongodb 会在需要的时候添加字段。 - Shady Atef
@Shady Atef。我设定了这样,但是我没有找到deleted_at字段。 - moses toh
1
@mosestoh 我猜可能是由于特性被遮蔽或者因为空值而被过滤了。尝试运行删除操作,然后查询 Message::withTrashed() 来查看已删除的记录是否有 deleted_at - apokryfos
显示剩余2条评论
1个回答

1
当您使用jenssegers/laravel-mongodb并插入对象(文档)时,不会创建deleted_at字段。当您在对象上执行delete()时,将创建并设置当前日期时间。保存对象时不必分配null值。该库默认检索没有设置deleted_at字段或具有null值的文档,以防先前执行过restore()方法。
在模型定义中不要忘记使用use Jenssegers\Mongodb\Eloquent\SoftDeletes;,否则SoftDelete将不起作用,并且它将始终返回所有记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接