Laravel 5.2 eloquent返回软删除的记录

时间:2016-02-25 11:50:17

标签: laravel laravel-5.2

我正在使用Laravel 5.2

我有model如下:

<?php

namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;

class ZoomMeeting extends BaseModel {

    public $timestamps=true;        

    protected $table = 'zoom_meetings';

    use SoftDeletes;

    protected $dates = ['deleted_at'];

    protected $fillable = ['user_id', 'uuid', 'meeting_id', 'host_id', 'topic', 'status', 'type', 'start_url', 'join_url', 'created_at'];

    public function users() {
        return $this->belongsTo('App\Models\User');
    }
}

基本模型如下:

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Auth;
use Carbon\Carbon;

class BaseModel extends Model {

    public $timestamps = false;

    protected static function boot()
     {
            //parent::boot();

            static::creating(function($model) {
                if(empty($model->created_at))
                {
                    $model->created_at = date('Y-m-d H:i:s');
                }
                return true;
            });

            static::updating(function($model) {
            $model->updated_at = date('Y-m-d H:i:s');
            return true;
            });
     } 
}

我在softdeletetrait模型中使用ZoomMeeting,并且软删除工作正常。

但是,如果我使用eloquent从同一模型中获取记录,它也会返回软删除的记录。我使用下面的代码来获取记录:

$record = ZoomMeeting::where("user_id", $user_id)->where("meeting_id", $meeting_id)->orderBy("id", "DESC")->first();

eloquent正在构建query

select * from `zoom_meetings` where `user_id` = 3 and `meeting_id` = 707070707 order by `id` desc limit 1

请参阅deleted at is null声明中未设置where。它不会阻止删除的记录。

我不确定我在哪里弄错了?

1 个答案:

答案 0 :(得分:4)

看起来你覆盖了boot方法,但你实际上并没有实际调用父boot方法(它被注释掉了),所以这个特性永远不会正确初始化。我相信这也意味着您正在删除的数据实际上正在从数据库中删除。

是否有理由需要覆盖启动方法?您正在添加的内容已经由框架处理,因此它似乎没有必要。