php - 在关系表中显示默认图像
问题描述
伙计们,我有一个产品表和一个 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 方法的最后一个逻辑添加到产品模型方法图像中,最好的方法是什么,而不是在刀片上创建条件来检查图像是否存在。
解决方案
您可以检查模型中是否存在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
表应该有一个引用该文件的值,只需根据需要使用它。
推荐阅读
- bash - 在 awk 脚本头中指定其他标志
- sql - oracle如何调用函数
- python-3.x - 如何在变量表中创建一个空列表以在关键字表中使用它?
- linux - 为什么这个简单的 Makefile 会陷入无限循环?
- android - 如何提高 ScrollView 的性能?
- sql - 将多行转换为具有多列的一行
- terraform - 使用 Terraform 为 aws_elastic_beanstalk_environment 自定义 aws_lb_listener
- python - python代码在kmeans聚类后查找特征重要性
- javascript - 带有子字典匹配的 JavaScript 域
- javascript - 解析 Openweathermap 请求,未处理的拒绝(TypeError):无法读取未定义的属性“速度”