orderBy('created_at', 'desc') ->get(); foreach ($uploadsToProcess as $upload) { $this->output->writeln(sprintf('Processing upload #%d', $upload->id)); $this->handleUpload($upload); } } private function handleUpload(Upload $upload) { $photos = $upload->uploadPhotos; foreach ($photos as $photo) { $this->handlePhoto($photo); } } private function handlePhoto(UploadPhoto $uploadPhoto) { /** @var Photo $photo */ $photo = $uploadPhoto->photo; $this->output->writeln(sprintf('Analysing photo #%d: %s', $photo->id, $photo->name)); /** @var Album $album */ $album = $photo->album; $albumSource = $album->getAlbumSource(); $photoFile = $albumSource->getPathToPhoto($album, $photo); $exifData = @exif_read_data($photoFile); dump($exifData); $photo->metadata_version = ProcessUploadCommand::METADATA_VERSION; $photo->taken_at = $this->metadataDateTime($exifData); $photo->camera_make = $this->metadataCameraMake($exifData); $photo->camera_model = $this->metadataCameraModel($exifData); $photo->camera_software = $this->metadataCameraSoftware($exifData); $photo->save(); } private function metadataCameraMake(array $exifData) { if (isset($exifData['Make'])) { return $exifData['Make']; } return null; } private function metadataCameraModel(array $exifData) { if (isset($exifData['Model'])) { return $exifData['Model']; } return null; } private function metadataCameraSoftware(array $exifData) { if (isset($exifData['Software'])) { return $exifData['Software']; } return null; } private function metadataDateTime(array $exifData) { $dateTime = null; if (isset($exifData['DateTime'])) { $dateTime = $exifData['DateTime']; } if (!is_null($dateTime)) { $dateTime = preg_replace('/^([\d]{4}):([\d]{2}):([\d]{2})/', '$1-$2-$3', $dateTime); } return $dateTime; } }