在Laravel/PHP中使用限制的SQL Select Join

在Laravel/PHP中使用限制的SQL Select Join,php,mysql,laravel,Php,Mysql,Laravel,我最初的查询搜索了主板,然后找到了主板的图像。但是现在,一些主板没有任何图像关联,所以我想运行一个查询,可以找到20个具有图像的独特主板 迄今为止的代码: $newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id') ->where('images.item_type', '=', 'motherboard') ->orderB

我最初的查询搜索了主板,然后找到了主板的图像。但是现在,一些主板没有任何图像关联,所以我想运行一个查询,可以找到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个限制的5倍。

不同版本:

    $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();