diff options
author | Jeremy Benoist <jeremy.benoist@gmail.com> | 2016-05-30 14:34:11 +0200 |
---|---|---|
committer | Thomas Citharel <tcit@tcit.fr> | 2016-06-23 09:15:50 +0200 |
commit | e42b13bcff41161ecdb4322dce1ef98a401482ca (patch) | |
tree | fcec3ed14bcb9d2d0ea4d07647dbcb61c9aae9fe /src/Wallabag/CoreBundle/Entity | |
parent | 6334f2cac16158a0ea4a8e540ace17550085942b (diff) | |
download | wallabag-e42b13bcff41161ecdb4322dce1ef98a401482ca.tar.gz wallabag-e42b13bcff41161ecdb4322dce1ef98a401482ca.tar.zst wallabag-e42b13bcff41161ecdb4322dce1ef98a401482ca.zip |
Change ManyToMany between entry & tag
Following https://gist.github.com/Ocramius/3121916
Be sure to remove the related entity when removing an entity.
Let say you have Entry -> EntryTag -> Tag.
If you remove the entry:
- before that commit, the EntryTag will stay (at least using SQLite).
- with that commit, the related entity is removed
Diffstat (limited to 'src/Wallabag/CoreBundle/Entity')
-rw-r--r-- | src/Wallabag/CoreBundle/Entity/Entry.php | 17 | ||||
-rw-r--r-- | src/Wallabag/CoreBundle/Entity/Tag.php | 23 |
2 files changed, 37 insertions, 3 deletions
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php index 84981414..ceae78b0 100644 --- a/src/Wallabag/CoreBundle/Entity/Entry.php +++ b/src/Wallabag/CoreBundle/Entity/Entry.php | |||
@@ -178,7 +178,15 @@ class Entry | |||
178 | 178 | ||
179 | /** | 179 | /** |
180 | * @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist"}) | 180 | * @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist"}) |
181 | * @ORM\JoinTable | 181 | * @ORM\JoinTable( |
182 | * name="entry_tag", | ||
183 | * joinColumns={ | ||
184 | * @ORM\JoinColumn(name="entry_id", referencedColumnName="id") | ||
185 | * }, | ||
186 | * inverseJoinColumns={ | ||
187 | * @ORM\JoinColumn(name="tag_id", referencedColumnName="id") | ||
188 | * } | ||
189 | * ) | ||
182 | * | 190 | * |
183 | * @Groups({"entries_for_user", "export_all"}) | 191 | * @Groups({"entries_for_user", "export_all"}) |
184 | */ | 192 | */ |
@@ -526,13 +534,18 @@ class Entry | |||
526 | } | 534 | } |
527 | } | 535 | } |
528 | 536 | ||
529 | $this->tags[] = $tag; | 537 | $this->tags->add($tag); |
530 | $tag->addEntry($this); | 538 | $tag->addEntry($this); |
531 | } | 539 | } |
532 | 540 | ||
533 | public function removeTag(Tag $tag) | 541 | public function removeTag(Tag $tag) |
534 | { | 542 | { |
543 | if (!$this->tags->contains($tag)) { | ||
544 | return; | ||
545 | } | ||
546 | |||
535 | $this->tags->removeElement($tag); | 547 | $this->tags->removeElement($tag); |
548 | $tag->removeEntry($this); | ||
536 | } | 549 | } |
537 | 550 | ||
538 | /** | 551 | /** |
diff --git a/src/Wallabag/CoreBundle/Entity/Tag.php b/src/Wallabag/CoreBundle/Entity/Tag.php index b4adbbd3..4b480ff1 100644 --- a/src/Wallabag/CoreBundle/Entity/Tag.php +++ b/src/Wallabag/CoreBundle/Entity/Tag.php | |||
@@ -98,9 +98,30 @@ class Tag | |||
98 | return $this->slug; | 98 | return $this->slug; |
99 | } | 99 | } |
100 | 100 | ||
101 | /** | ||
102 | * @param Entry $entry | ||
103 | */ | ||
101 | public function addEntry(Entry $entry) | 104 | public function addEntry(Entry $entry) |
102 | { | 105 | { |
103 | $this->entries[] = $entry; | 106 | if ($this->entries->contains($entry)) { |
107 | return; | ||
108 | } | ||
109 | |||
110 | $this->entries->add($entry); | ||
111 | $entry->addTag($this); | ||
112 | } | ||
113 | |||
114 | /** | ||
115 | * @param Entry $entry | ||
116 | */ | ||
117 | public function removeEntry(Entry $entry) | ||
118 | { | ||
119 | if (!$this->entries->contains($entry)) { | ||
120 | return; | ||
121 | } | ||
122 | |||
123 | $this->entries->removeElement($entry); | ||
124 | $entry->removeTag($this); | ||
104 | } | 125 | } |
105 | 126 | ||
106 | public function hasEntry($entry) | 127 | public function hasEntry($entry) |