从第二个表中仅连接表一到多个关系

时间:2017-02-17 09:47:46

标签: mysql sql laravel-5

我有一对多关系的物品和图像表。

1项可以有很多图像,但我只需要1张图像即可加入表格。

+

这将返回所有图像,但我只想要第一张图像。 first()不起作用,limit(1)不起作用

我想要结果:1个项目及其第一张图片。如何实现这个目标?

2 个答案:

答案 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();

我还没有在机器上测试过这个