如何清除Laravel Eloquent模型的关系属性?

时间:2018-01-15 16:10:57

标签: php laravel eloquent

有两种型号

item
image

并且它们之间存在hasMany关系(项目有很多图像)

我需要删除项目的所有图像,然后创建新图像并传递带有新图像的项目进行查看。

$item->images()->delete();
foreach ($this->new_images as $public_id){
    $item->images()->create([
         'public_id' => $public_id
    ]);
}

然而,在这种情况下,我错过了关于已删除图像的deleted Eloquent事件,这在本案中很重要。我试图单独删除它们:

$item->images->each(function($image){
    $image->delete();
});
foreach ($this->new_images as $public_id){
    $item->images()->create([
         'public_id' => $public_id
    ]);
}

现在已解雇deleted事件,但旧图像未从$item中删除。它们实际上已从数据库中删除,但$item未更新(就像$item->images()->delete()一样)且仍保留引用。

有没有办法清除这种关系?在伪代码中:

//delete images one-by-one
$item->images = null;
// now add the new images

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法重新加载图片数据

$item->load('images');