在关联表中显示默认图像

时间:2019-03-05 17:33:27

标签: php laravel laravel-5 eloquent

伙计们,我有一个产品表和一个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 个答案:

答案 0 :(得分:1)

您可以检查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应该具有一个引用文件的值,只需根据需要使用即可。