[英]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.