|
4 | 4 | namespace Plank\Mediable;
|
5 | 5 |
|
6 | 6 | use Closure;
|
7 |
| -use Illuminate\Database\Eloquent\Builder; |
| 7 | +use Illuminate\Database\Query\Builder; |
8 | 8 | use Illuminate\Database\Eloquent\Collection;
|
9 | 9 | use Illuminate\Database\Eloquent\Model;
|
10 | 10 | use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
@@ -116,24 +116,33 @@ public function delete(): void
|
116 | 116 | $query = $relation->newPivotStatement();
|
117 | 117 | $classes = [];
|
118 | 118 |
|
119 |
| - $this->each(function (Model $item) use ($query, $relation, $classes) { |
120 |
| - // collect list of ids of each class in case not all |
121 |
| - // items belong to the same class |
122 |
| - $classes[get_class($item)][] = $item->getKey(); |
| 119 | + $this->each( |
| 120 | + function (Model $item) use ($query, $relation, &$classes) { |
| 121 | + // collect list of ids of each class in case not all |
| 122 | + // items belong to the same class |
| 123 | + $classes[get_class($item)][] = $item->getKey(); |
| 124 | + } |
| 125 | + ); |
123 | 126 |
|
124 |
| - // select pivots matching each item for deletion |
125 |
| - $query->orWhere(function (Builder $q) use ($item, $relation) { |
126 |
| - $q->where($relation->getMorphType(), get_class($item)); |
127 |
| - $q->where($relation->getQualifiedForeignPivotKeyName(), $item->getKey()); |
128 |
| - }); |
129 |
| - }); |
| 127 | + // delete each item by class |
| 128 | + collect($classes)->each( |
| 129 | + function (array $ids, string $class) use ($query, $relation) { |
| 130 | + // select pivots matching each item for deletion |
| 131 | + $query->orWhere( |
| 132 | + function (Builder $q) use ($class, $ids, $relation) { |
| 133 | + $q->where($relation->getMorphType(), $class); |
| 134 | + $q->whereIn( |
| 135 | + $relation->getQualifiedForeignPivotKeyName(), |
| 136 | + $ids |
| 137 | + ); |
| 138 | + } |
| 139 | + ); |
| 140 | + |
| 141 | + $class::whereIn((new $class)->getKeyName(), $ids)->delete(); |
| 142 | + } |
| 143 | + ); |
130 | 144 |
|
131 | 145 | // delete pivots
|
132 | 146 | $query->delete();
|
133 |
| - |
134 |
| - // delete each item by class |
135 |
| - collect($classes)->each(function (array $ids, string $class) { |
136 |
| - $class::whereIn((new $class)->getKeyName(), $ids)->delete(); |
137 |
| - }); |
138 | 147 | }
|
139 | 148 | }
|
0 commit comments