繁体   English   中英

删除与学说的关联

[英]Removing associations with Doctrine

我正在使用Doctrine,有三个表。 artistscategoriesartist_category 我有一个导入脚本,该脚本从站点导入艺术家,类别和关联并将其保存到数据库中。 我遇到的问题是删除关联。 假设我有一位艺术家,并且该艺术家与三个类别相关联。 现在,在下一个导入中,删除了artist_category关联。 我现在想做的是从关联表中删除不再相关的类别。

假设我的艺术家的ID为254,应该删除的类别的ID为4。

我的数据库表当前看起来像这样

在此处输入图片说明

现在,我有了一个与艺术家应该关联的所有类别的数组

array(1) {
  [0]=>
  string(1) "3"
}

这意味着,在下一步中,我必须删除关联artist_id(254)和artistcategory_id(4)。

我在做什么

foreach ($artist->getArtistCategories() as $artistCategory) {
    if (!in_array($artistCategory->getId(), $artistCategories)) {
        $artist->removeArtistCategories($artistCategory->getId());
    }
}

这正在工作。 在类别4的情况下,将调用removeArtistCategories方法。 但是,删除无效。 这是我尝试过的

$this->artistCategories->removeElement($artistCategory);

返回假

$this->artistCategories->remove($artistCategory);

返回null

$this->artistCategories->contains($artistCategory)

返回假

但是,当我var_dump($this->artistCategories)我得到了有关类别的很多信息。 但是,删除不起作用。 我究竟做错了什么?

原则适用于实体对象,而不适用于ID。 所以与其:

$artist->removeArtistCategory($artistCategory->getId());

尝试

$artist->removeArtistCategory($artistCategory);

并按照“ Doctrine”文档中的说明定义卸妆:

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#association-management-methods

public function removeArtistCategory(Category $category) {
    $this->artistCategories->removeElement($category);
}

请注意,由于您只删除一个条目而不是多个类别,因此我将方法removeArtistCategories重命名为removeArtistCategory 这一点很重要,因为removers adders具有与getterssetters一样的命名约定,并且如果您未正确定义方法,则在使用某些组件进行学说时会遇到问题。

我只是假设您在ArtistCategory之间存在toMany关系,因为我不知道您的实体定义,我需要更多信息才能为您提供适当的解决方案。 因此,此代码未经测试,可能无法正常工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM