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