Php 使用附加逻辑删除子模型
我有一个父模型和一个子模型,比如说类别和帖子。Php 使用附加逻辑删除子模型,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个父模型和一个子模型,比如说类别和帖子。Post模型可以附加一个特征图像,在删除Post时需要将其从存储器中删除,因此在myPostControllermyDistroy方法中如下所示: public function destroy($id) { $post = Post::findOrFail($id); if ($post->featured_image_path) { Storage::delete($post->featured_im
Post
模型可以附加一个特征图像,在删除Post时需要将其从存储器中删除,因此在myPostController
myDistroy
方法中如下所示:
public function destroy($id)
{
$post = Post::findOrFail($id);
if ($post->featured_image_path) {
Storage::delete($post->featured_image_path);
}
$post->delete();
return redirect('/admin/posts');
}
MyCategoryController
有一个类似的Distroy
方法,但是当它被销毁时,它还需要删除它的每个Post
s。我知道我可以使用外键并依靠关系删除帖子,但这样做时,不会从存储中删除特色图片。我可以在我的Category@delete
方法并检查特征图像,但在多个位置复制此逻辑似乎不正确
在
类别控制器
中删除类别
时,从我的Post
上的destroy
方法运行逻辑的最佳方法是什么?您可以使用这样的方法
class Categories extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete Post goes here...
});
}
}
class Post extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete FeatureImage goes here...
});
}
}
像这样更改您的类别
型号
class Categories extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete Post goes here...
});
}
}
class Post extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete FeatureImage goes here...
});
}
}
Post
像这样的模型
class Categories extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete Post goes here...
});
}
}
class Post extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete FeatureImage goes here...
});
}
}
因此,当一个类别
被删除时,它对应的Post
,然后将根据您的逻辑删除图像
作为增强功能,您可以在
deleted()
method中触发事件
class Categories extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete Post goes here...
});
}
}
class Post extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete FeatureImage goes here...
});
}
}
像这样更改您的类别
型号
class Categories extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete Post goes here...
});
}
}
class Post extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete FeatureImage goes here...
});
}
}
Post
像这样的模型
class Categories extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete Post goes here...
});
}
}
class Post extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete FeatureImage goes here...
});
}
}
因此,当一个类别
被删除时,它对应的Post
,然后将根据您的逻辑删除图像
作为增强功能,您可以在
deleted()内触发事件
method我认为最好将所有$post->characterized\u image\u path
收集到一个数组或其他东西中,然后将其发送到清理作业并继续进行正常的关系删除。@CerlinBoss您如何将清理作业与关系删除联系起来?正如我所说的。首先收集阵列中要删除的文件的位置,然后分派作业进行清理,然后继续执行正常的删除过程。或者在成功删除$category
和$posts
后,使用观察者和OberverServiceProvider
分派清理作业,这在我看来是一个更干净的解决方案。请参阅:我认为最好将所有$post->特色图片路径
收集在一个数组或其他东西中,然后将其发送到清理作业并继续你的正常关系删除。@CerlinBoss你会如何将清理工作与关系删除联系起来?正如我所说。首先收集阵列中要删除的文件的位置,然后分派作业进行清理,然后继续执行正常的删除过程。或者在成功删除$category
和$posts
后,使用观察者和OberverServiceProvider
分派清理作业,这将是一个更干净的解决方案。请参阅:我喜欢这种方法,特别是有可能在删除时触发事件。很高兴为您提供帮助:)是的,您可以使用Laravel观察员提取上述逻辑并清理您的模型。当您收听给定模型上的许多事件时,这很方便。我喜欢这种方法,尤其是在删除时触发事件的可能性。很高兴为您提供帮助:)是的,您可以使用Laravel观察员提取上述逻辑并清理模型。当您收听给定模型上的许多事件时,这很方便。