我的原始查询搜索了主板,然后找到了主板的图像。但是现在,有些主板没有任何关联的图像,所以我想运行一个查询,可以找到20个带图像的独特主板。
到目前为止代码:
$newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
->where('images.item_type', '=', 'motherboard')
->orderBy('motherboards.date_added', 'desc')
->take(20)
->get();
我甚至尝试过选择特定的结果:
$newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
->select('motherboards.motherboard_id', 'motherboards.name')
->where('images.item_type', '=', 'motherboard')
->orderBy('motherboards.date_added', 'desc')
->take(20)
->get();
上面代码的问题在于,当我遍历每个$ newMotherboards时,它对于存在ID的每个图像都有重复。我只想检索20个最近添加它们的独特主板,但有图像。
如果一个项目有5个图像并且它是最近添加的20个图像之一,那么它将出现我20个限制的五倍。
答案 0 :(得分:2)
不同版本:
$newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
->select('motherboards.motherboard_id', 'motherboards.name')
->where('images.item_type', '=', 'motherboard')
->distinct()
->orderBy('motherboards.date_added', 'desc')
->take(20)
->get();
Groupby版本:
$newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
->select('motherboards.motherboard_id', 'motherboards.name')
->where('images.item_type', '=', 'motherboard')
->groupby('images.item_type')
->orderBy('motherboards.date_added', 'desc')
->take(20)
->get();