public function doCreateAlbum(Guard $guard, Request $request) { if ($guard->guest()) { throw new AppException(AppException::NEED_SIGN_IN); } $musics = $request->get('musics'); $coverImageId = $request->get('cover_image_id'); $title = $request->get('title'); $artist = $request->get('artist'); $year = $request->get('year'); $genre = $request->get('genre'); $album = new Album(); $album->title = $title; $album->artist = $artist; $album->year = $year; $album->genre = $genre; $album->coverImage()->associate($coverImageId); $album->user()->associate($guard->id()); $album->save(); foreach ($musics as $musicId) { /** @var Music $music */ $music = Music::where('id', $musicId)->first(); if (!$music) { continue; } $album->musics()->attach($musicId); if (!$music->coverImage) { $music->coverImage()->associate($album->coverImage); $music->save(); } } return $this->buildResponse(trans('api.album.create.success'), Tools::toArray($album)); }