diff --git a/src/Review/Models/ProductReview.php b/src/Review/Models/ProductReview.php index 978c17e..1b94424 100644 --- a/src/Review/Models/ProductReview.php +++ b/src/Review/Models/ProductReview.php @@ -5,8 +5,11 @@ namespace Modules\Core\Review\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Lunar\Models\Product; +use Spatie\Image\Enums\BorderType; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; class ProductReview extends Model implements HasMedia { @@ -30,4 +33,23 @@ class ProductReview extends Model implements HasMedia { $this->addMediaCollection(self::IMAGES_COLLECTION); } + + /** + * Unlike Product/ProductVariant, this model sits outside Lunar's own + * MediaDefinitionsInterface (Lunar\Base\StandardMediaDefinitions), which is + * what registers the 'small' conversion those models get automatically. Without + * this, Modules\Core\Search\ProductIndexer::mapMedia() — shared across product, + * variant, and review media — throws Spatie\MediaLibrary\MediaCollections\ + * Exceptions\InvalidConversion the first time a review has an image, since + * $media->getUrl('small') has no matching conversion to resolve. + */ + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('small') + ->fit(Fit::Fill, 300, 300) + ->border(0, BorderType::Overlay, color: '#FFF') + ->background('#FFF') + ->sharpen(10) + ->keepOriginalImageFormat(); + } }