首页 > 解决方案 > 在关系表中显示默认图像

问题描述

伙计们,我有一个产品表和一个 products_images。

在我的产品模型中,我有一个方法可以获取与产品相关的图像,而在 product_images 模型中,我有另一个方法(mutator)来检查图像是否存在,如果存在则显示图像,如果不显示默认值图片。

但是我注意到我做错了,因为如果产品图像不存在于表 product_images 中,该方法将永远不会被触发,因此所有逻辑都应该在产品模型中。

我就是这样做的:

产品型号:

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

产品图片型号:

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 方法的最后一个逻辑添加到产品模型方法图像中,最好的方法是什么,而不是在刀片上创建条件来检查图像是否存在。

标签: phplaravellaravel-5eloquent

解决方案


您可以检查模型中是否存在image关系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应该有一个引用该文件的值,只需根据需要使用它。


推荐阅读