<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Notifications\Notifiable; class Photo extends Model { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'album_id', 'user_id', 'name', 'description', 'file_name', 'storage_file_name', 'mime_type', 'file_size', 'metadata_version', 'taken_at', 'camera_make', 'camera_model', 'camera_software', 'width', 'height', 'is_analysed', 'raw_exif_data', 'aperture_fnumber', 'iso_number', 'shutter_speed', 'created_at', 'updated_at' ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ ]; public function album() { return $this->belongsTo(Album::class); } public function exifUrl() { return route('viewExifData', [ 'albumUrlAlias' => $this->album->url_path, 'photoFilename' => $this->storage_file_name ]); } public function labelIDs() { $labelIDs = []; foreach ($this->labels()->orderBy('name')->get() as $label) { $labelIDs[] = $label->id; } return implode(',', $labelIDs); } public function labels() { return $this->belongsToMany(Label::class, 'photo_labels'); } public function thumbnailUrl($thumbnailName = null, $cacheBust = true) { $url = $this->album->getAlbumSource()->getUrlToPhoto($this, $thumbnailName); if ($cacheBust) { // Append the timestamp of the last update to avoid browser caching $theDate = is_null($this->updated_at) ? $this->created_at : $this->updated_at; $url .= sprintf('%s_=%d', (strpos($url, '?') === false ? '?' : '&'), $theDate->format('U')); } return $url; } public function url() { return route('viewPhoto', [ 'albumUrlAlias' => $this->album->url_path, 'photoFilename' => $this->storage_file_name ]); } }