【问题标题】:How to detect force delete in model event如何检测模型事件中的强制删除
【发布时间】:2019-09-11 06:06:31
【问题描述】:

我设置了一个模型事件来检查图像何时被删除并删除相关的 image_size 模型条目。但是图像使用软删除,所以如果它被软删除,那么我想软删除 image_size 记录,但如果使用 forceDelete 硬删除图像,那么我想硬删除 image_size 记录。有没有办法检测它是什么类型的删除并采取相应的行动。以下是我的 Image 模型中的内容:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Image extends Model
{
    use SoftDeletes;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['url', 'thumb_url', 'filename'];

    /**
     * Relationship to image sizes
     */
    public function sizes()
    {
        return $this->hasMany('App\Image_size');
    }

    /**
    * Model events
    */
    protected static function boot() {
        parent::boot();

        static::deleting(function($image) { // before delete() method call this
             $image->sizes()->delete();
        });
    }
}

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    如果我没记错的话,您在 $image 对象上有一个名为 forceDeleting 的属性。

    static::deleting(function($image) { 
        if($image->forceDeleting){
            //do in case of force delete
        } else {
            //do in case of soft delete
        }
    });
    

    但是我认为上次我这样做是在几个版本中,所以不确定它是否仍然有效。

    【讨论】:

    • 现在好像是$image-&gt;isForceDeleting()
    【解决方案2】:

    现在forceDeleting 受到保护(您无法访问值)。您需要使用
    $image-&gt;isForceDeleting()

    当你使用 Observers 时(推荐在 Laravel >5.5 上使用)。

    class Image extends Model
    {
        use SoftDeletes;
    
        /* ... */
    
        protected static function boot(): void
        {
            parent::boot();
            parent::observe(ImageObserver::class);
        }
    }
    
    class ImageObserver
    {
        public function deleting($image): void
        {
            if ($image->isForceDeleting()) {
                // do something
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      从 Laravel 5.6 开始,SoftDeletes trait 现在会触发 forceDeleted 模型事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-06
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多