From 699f29fe4c2ca5078905fea1b4b81a034534491b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Santos?= Date: Fri, 28 Oct 2022 13:06:49 +0100 Subject: [PATCH] Save and retrieve media combinations --- src/app/Models/MediaCombination.php | 21 +++++++++++++++++++++ src/app/Models/MediaContent.php | 5 +++++ src/app/Models/Traits/MediaTrait.php | 21 +++++++++++++++++---- 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/app/Models/MediaCombination.php diff --git a/src/app/Models/MediaCombination.php b/src/app/Models/MediaCombination.php new file mode 100644 index 0000000..803ffe8 --- /dev/null +++ b/src/app/Models/MediaCombination.php @@ -0,0 +1,21 @@ +belongsTo(Media::class); } + + public function combinatedMedias() + { + return $this->belongsToMany(Media::class, 'media_has_combinations', 'media_id', 'combinated_media_id'); + } } diff --git a/src/app/Models/Traits/MediaTrait.php b/src/app/Models/Traits/MediaTrait.php index 8a040b5..0410546 100644 --- a/src/app/Models/Traits/MediaTrait.php +++ b/src/app/Models/Traits/MediaTrait.php @@ -20,7 +20,7 @@ public function getMedia($column, $mediaFieldId = false) $orderedIds = array_values($mediaIds->toArray()); $mediaContents = MediaContent::whereIn('media_id', $mediaIds) - ->with('media')->get(); + ->with(['media', 'combinatedMedias'])->get(); foreach ($mediaContents as $mediaContent) { foreach ($mediaIds as $position => $mediaId) { @@ -45,24 +45,37 @@ public static function afterCreate($entry) if ($entry[$column] !== null) { $decoded = json_decode($entry[$column]); if (is_object($decoded) && count($decoded->medias) > 0) { - $mediaIds = $decoded->medias; + $medias = $decoded->medias; $mediaField = MediaField::create([ 'entity_type' => self::class, 'entity_id' => $entry->id, ]); $data = []; + $combinationData = []; + $i = 1; - foreach ($mediaIds as $mediaId) { + foreach ($medias as $media) { array_push($data, [ - 'media_id' => $mediaId, + 'media_id' => $media->id, 'media_field_id' => $mediaField->id, 'position' => $i, ]); + + if (count($media->combined_medias)) { + foreach ($media->combined_medias as $combinedMediaId) { + array_push($combinationData, [ + 'media_id' => $media->id, + 'combinated_media_id' => $combinedMediaId, + ]); + } + } + $i++; } DB::table('media_field_has_media')->insert($data); + DB::table('media__has_combinations')->insert($combinationData); $entry[$column] = $mediaField->id; $entry->saveQuietly();