diff --git a/src/Controllers/Traits/Attachable.php b/src/Controllers/Traits/Attachable.php index a244099..6c92df7 100644 --- a/src/Controllers/Traits/Attachable.php +++ b/src/Controllers/Traits/Attachable.php @@ -4,6 +4,7 @@ use Illuminate\Http\Response; use Log; +use Illuminate\Database\Eloquent\Model; /** * Shortcuts for many-to-many attachments @@ -47,6 +48,16 @@ private function treatRelation($model, &$relation) { } } + protected function prepareAttachItems($items, Model $model, $relation) { + return $items; + } + protected function prepareDetachItems($items, Model $model, $relation) { + return $items; + } + protected function prepareSyncItems($items, Model $model, $relation) { + return $items; + } + /** * Fetches a paginated list of related items * @@ -87,7 +98,7 @@ public function attach($id, $relation, $paramKey = null) try { $items = request()->input($paramKey); $this->treatRelation($model, $relation); - $model->$relation()->syncWithoutDetaching($items); + $model->$relation()->syncWithoutDetaching($this->prepareAttachItems($items, $model, $relation)); return response()->json([ 'status' => 'ok' ]); @@ -121,7 +132,7 @@ public function detach($id, $relation, $paramKey = null) try { $items = request()->input($paramKey); $this->treatRelation($model, $relation); - $model->$relation()->detach($items); + $model->$relation()->detach($this->prepareDetachItems($items, $model, $relation)); return response()->json([ 'status' => 'ok' ]); @@ -155,7 +166,7 @@ public function sync($id, $relation, $paramKey = null) try { $items = request()->input($paramKey); $this->treatRelation($model, $relation); - $resp = $model->$relation()->sync($items); + $resp = $model->$relation()->sync($this->prepareSyncItems($items, $model, $relation)); $resp['added'] = $resp['attached']; $resp['removed'] = $resp['detached']; unset($resp['attached']);