【发布时间】:2020-01-21 12:08:12
【问题描述】:
我正在制作一个可以(软)删除帖子的应用。它将删除数据库中的记录并删除存储中的图像文件,我尝试在我的模型中为delete() 创建一个覆盖方法,它看起来像这样
public function delete()
{
$tempImage = $this->image;
parent::delete();
$this->imageDelete($tempImage);
}
public function imageDelete($image)
{
$this->image = null;
$this->save();
if (! empty($image)) {
unlink(public_path() . self::$pathImage . $image);
unlink(public_path() . self::$pathThumb . $image);
}
}
它适用于删除一条记录。但是,当我尝试删除多条记录时(使用whereIn),覆盖方法没有被访问,whereIn 正在访问真正的delete() 方法。
这是我删除帖子的控制器
public function delete(Request $r)
{
Message::findOrFail($r->id)->delete();
return redirect()->back();
}
public function multipleDelete(Request $r)
{
Message::whereIn('id', $r->select)->delete();
return redirect()->back();
}
如果我删除multipleDelete()的记录,它只会删除数据库中的记录。
【问题讨论】:
-
为什么不使用 Message::destroy([1, 2, 3])。其中您可以在那里传递单个或多个 id。您有更长的逻辑来删除单个和多个消息。
-
我需要删除每个id的图片