geo*_*310 4 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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,你在$image对象上有一个属性叫做forceDeleting.
static::deleting(function($image) {
if($image->forceDeleting){
//do in case of force delete
} else {
//do in case of soft delete
}
});
Run Code Online (Sandbox Code Playgroud)
但是我认为上次我这样做是在几个版本中,所以不确定它是否仍然有效.
现在forceDeleting受到保护(您无法访问值)。你需要使用
$image->isForceDeleting()
当您使用观察者时(推荐在 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
}
}
}
Run Code Online (Sandbox Code Playgroud)