|
20 | 20 |
|
21 | 21 | namespace Cartalyst\Tags;
|
22 | 22 |
|
| 23 | +use Illuminate\Database\Eloquent\Collection; |
23 | 24 | use Illuminate\Database\Eloquent\Model;
|
24 | 25 | use Illuminate\Database\Eloquent\Builder;
|
25 | 26 | use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
26 | 27 |
|
| 28 | +/** @property Collection<IlluminateTag> $tags */ |
27 | 29 | trait TaggableTrait
|
28 | 30 | {
|
29 | 31 | /**
|
@@ -172,10 +174,19 @@ public function tag($tags): bool
|
172 | 174 | */
|
173 | 175 | public function untag($tags = null): bool
|
174 | 176 | {
|
175 |
| - $tags = $tags ?: $this->tags->pluck('name')->all(); |
176 |
| - |
177 |
| - foreach ($this->prepareTags($tags) as $tag) { |
178 |
| - $this->removeTag($tag); |
| 177 | + if (empty($tags)) { |
| 178 | + $tags = $this->tags; |
| 179 | + if (!empty($tags)) { |
| 180 | + $this->tags()->detach(); |
| 181 | + foreach ($tags as $tag) { |
| 182 | + $tag->update(['count' => $tag->count - 1]); |
| 183 | + } |
| 184 | + $this->tags = new Collection(); |
| 185 | + } |
| 186 | + } else { |
| 187 | + foreach ($this->prepareTags($tags) as $tag) { |
| 188 | + $this->removeTag($tag); |
| 189 | + } |
179 | 190 | }
|
180 | 191 |
|
181 | 192 | return true;
|
@@ -214,6 +225,7 @@ public function setTags($tags, string $type = 'name'): bool
|
214 | 225 | */
|
215 | 226 | public function addTag(string $name): void
|
216 | 227 | {
|
| 228 | + /** @var IlluminateTag $tag */ |
217 | 229 | $tag = $this->createTagsModel()->firstOrCreate([
|
218 | 230 | 'slug' => $this->generateTagSlug($name),
|
219 | 231 | 'namespace' => $this->getEntityClassName(),
|
@@ -242,6 +254,7 @@ public function removeTag(string $name): void
|
242 | 254 |
|
243 | 255 | $namespace = $this->getEntityClassName();
|
244 | 256 |
|
| 257 | + /** @var IlluminateTag $tag */ |
245 | 258 | $tag = $this->tags()
|
246 | 259 | ->whereNamespace($namespace)
|
247 | 260 | ->where(function ($query) use ($name, $slug) {
|
|
0 commit comments