Отображение изображения по умолчанию в таблице отношений - PullRequest
0 голосов
/ 05 марта 2019

Я, ребята, у меня есть таблица продуктов и products_images.

В моей модели продукта у меня есть метод, который получает изображение, связанное с продуктом, и, чем в модели product_images, у меня есть другой метод (мутатор), который проверяет, существуют ли изображения, и, если они существуют, показывает изображение, если не показывает изображение по умолчанию.

Но я замечаю, что я делаю это неправильно, поскольку случай, когда изображение продукта не существует в таблице product_images,метод никогда не запустится, поэтому вся логика должна быть в модели продукта.

Вот как я это сделал:

Модель продукта:

 public function image()
    {
      return $this->hasOne(ProductImage::class);          
    }

Модель ProductImage:

protected $fillable = [
        'product_id', 'path', 'is_main_image'
    ];
    public function getPathAttribute($value)
    {

        if($value){

            $image = url('storage/media/products/thumbs/'.$value);
        }else{
            $image = 'https://via.placeholder.com/206';
        }
        return $image;
    }

Итак, что я сделал, как я могу добавить последнюю логику метода ProductImage к мето-образу модели продукта, как лучше всего обходиться без создания условных обозначений на блейде, чтобы проверить, существует ли изображениеили нет.

1 Ответ

1 голос
/ 05 марта 2019

Вы можете проверить наличие отношения image в модели Product, например:

product.php:

public function image(){
  return $this->hasOne(Image::class);
}

public function getImageSrcAttribute(){
  if($this->image){
    return url("storage/media/products/thumbs/".$this->image->path);
  }
  return "https://via.placeholder.com/206";
}

И, просто в вашем клинке, позвоните

<img src='{{ $product->image_src }}'/>

Обратите внимание, $this->image->path это просто заполнитель; Ваша images таблица должна иметь значение, которое ссылается на файл, просто используйте его по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...