url_alias = ucfirst(preg_replace('/[^a-z0-9\-]/', '-', strtolower($this->name))); } /** * @return IAlbumSource */ public function getAlbumSource() { $fullClassName = sprintf('App\AlbumSources\%s', $this->storage->source); /** @var IAlbumSource $source */ $source = new $fullClassName; $source->setAlbum($this); $source->setConfiguration($this->storage); return $source; } public function photos() { return $this->hasMany(Photo::class); } public function storage() { return $this->belongsTo(Storage::class); } public function thumbnailUrl($thumbnailName) { $photo = $this->photos() ->inRandomOrder() ->first(); if (!is_null($photo)) { return $this->getAlbumSource()->getUrlToPhoto($photo, $thumbnailName); } return ''; } public function url() { return route('viewAlbum', $this->url_alias); } }