我有一对多关系的物品和图像表。
1项可以有很多图像,但我只需要1张图像即可加入表格。
+
这将返回所有图像,但我只想要第一张图像。 first()不起作用,limit(1)不起作用
我想要结果:1个项目及其第一张图片。如何实现这个目标?
答案 0 :(得分:0)
试试这个
$items = DB::table('items')
->leftjoin('item_images','items.id','=','item_images.item_id')
->select('items.id', 'items.name', 'item_images.image_file')
->distinct()
->get();
你可以使用join,但它对我们雄辩的关系更好。
答案 1 :(得分:0)
您必须分三个步骤解决此问题:
第1步:找到每个项目的第一张图片的ID
$minQuery = DB::table('item_images')
->select(DB::raw('min(id) AS id'))
->groupBy('item_id')
->toSql();
第2步:检索这些图像的详细信息
$joinQuery = DB::table('item_images')
->select('item_images.id', 'item_images.item_id', 'item_images.image_file')
->join(DB::raw("($minQuery) AS m"), 'item_images.id', '=', 'm.id')
->toSql();
第3步:将其加入items
表格
$items = DB::table('items')
->select('items.id', 'items.name', 'ii.image_file')
->leftJoin(DB::raw("($joinQuery) AS ii"), 'items.id', '=', 'ii.item_id')
->get();
我还没有在机器上测试过这个