[英]Removing associations with Doctrine
我正在使用Doctrine,有三个表。 artists
, categories
, artist_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”文档中的说明定义卸妆:
public function removeArtistCategory(Category $category) {
$this->artistCategories->removeElement($category);
}
请注意,由于您只删除一个条目而不是多个类别,因此我将方法removeArtistCategories
重命名为removeArtistCategory
。 这一点很重要,因为removers
adders
具有与getters
和setters
一样的命名约定,并且如果您未正确定义方法,则在使用某些组件进行学说时会遇到问题。
我只是假设您在Artist
和Category
之间存在toMany关系,因为我不知道您的实体定义,我需要更多信息才能为您提供适当的解决方案。 因此,此代码未经测试,可能无法正常工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.