我一直在阅读关于删除媒体的Laravel-Mediable docs。
但是,我对如何删除特定媒体及其文件而不使用查询构建器感到有些困惑。根据文档,
注意:查询构建器上的delete()方法不会删除关联的文件。由于级联外键,它仍然会清除关系。
答案 0 :(得分:0)
laravel-mediable的作者。
这样做的原因是,当调用可用模型的delete()
方法时,我们能够hook进入该行为以从磁盘清理文件。但是,当调用查询构建器的delete()
方法时,它只是在数据库上运行DELETE FROM ...
SQL查询而不通知应用程序的任何其他部分。
删除与查询匹配的模型及其文件的最简单方法是先执行选择查询,然后逐个删除模型。
$results = Media::where(...)->get();
$results->each(function($media) {
$media->delete();
});
当然,这会产生N + 1个查询。我将注意为下一版本的待办事项列表添加更好的批量删除方法。