php - Laravel sql if 语句
问题描述
我想在我的页面上显示所有产品。每个产品都有 x 个图像。某些产品的图像设置为封面图像。现在我需要获取所有带有封面图片的产品,如果某个特定产品没有设置封面图片,那么我需要获取一张随机图片。
+----+--------------+
| id | product_name |
+----+--------------+
| 1 | Ferrari |
| 2 | Audi |
| 3 | BMW |
+----+--------------+
+----+--------------+------------+-------------+--+
| id | image_name | product_id | cover_image |
+----+--------------+------------+-------------+
| 1 | audi.jpg | 2 | 1 |
| 2 | Audis.jpeg | 2 | |
| 3 | bemms.jpg | 3 | 1 |
| 4 | ferrari.jpeg | 1 | |
| 5 | ferr.jpg | 1 | |
+----+--------------+------------+-------------+
到目前为止,我已经尝试过这段代码,但它并没有解决我的问题,因为我只得到带有封面图像集的图片。
public static function get_all_products() {
return \DB::table('products')
->leftjoin('product_pictures', 'products.id', '=', 'product_pictures.product_id')
->select('products.name', 'product_pictures.images_name')
->where('product_pictures.cover_image', '=', 1)
->get();
}
欢迎任何帮助!
解决方案
您可以在子句product_pictures
中稍作调整,对表进行自联接on
select p.*, pp1.*
from products p
join product_pictures pp1 on p.id = pp1.product_id
left join product_pictures pp2
on pp1.product_id = pp2.product_id
and case when pp1.cover_image is null
then pp1.id > pp2.id
else null
end
where pp2.product_id is null
order by p.id
推荐阅读
- vue.js - Vue 3 不更新 getter
- php - 切换到 https 搞砸了我的 ajax 调用
- android - GoogleSignIn 统一包依赖冲突 Google Play 服务
- java - 导入 Java BigInteger
- r - 使用长数据格式更改 ggplot2 图中的一种线型
- css - 仅发布压缩 (.min.css) 文件的 Visual Studio 设置
- php - 如何在具有相同键的 1 个数组上使用 array_merge_recursive
- javascript - arr.splice() 方法删除反应原生项目中的错误项目
- hyperlink - 将动态链接添加到自定义字段
- python - 如何将 google colab 中的集群文件保存到 Google Drive