如何在模型事件

时间:2015-07-08 14:01:42

标签: php laravel laravel-5

我已经设置了一个模型事件来检查图像何时被删除并删除相关的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();
        });
    }
}

3 个答案:

答案 0 :(得分:7)

如果我没记错,你在名为$image的{​​{1}}对象上有一个属性。

forceDeleting

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

答案 1 :(得分:1)

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

使用观察员时(推荐使用Laravel&gt; 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
        }
    }
}

答案 2 :(得分:1)

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