如何在eloquent中使用连接选择子查询中的最大聚合

时间:2017-07-06 08:58:54

标签: mysql laravel eloquent

我想选择最新的条目,但没有时间戳(created_at)可以通过选择主键上的max来识别它。问题在于子查询中需要加入表。

查询如下:

        $prodarr = DB::table('onhand_inventory')
            ->leftJoin('mapping', 'onhand_inventory.sku', '=', 'mapping.sku')
            ->where('mapping.mid', function ($query) {
                $query->select('mapping.mid')->from('mapping')
                    ->whereRaw('onhand_inventory.sku = mapping.sku')
                    ->max('mapping.mid');
            })->leftJoin('order_products', 'order_products.sku', '=', 'onhand_inventory.sku')
            ->leftJoin('vendors', 'mapping.v_id', '=', 'vendors.vid')
            ->where('onhand_inventory.shipped_with_box', 0)
            ->groupBy('onhand_inventory.inv_id')
            ->orderBy('onhand_inventory.inv_id')
            ->get();

执行上述查询后,抛出以下错误 未找到列:1054未知列' onhand_inventory.sku'在' where子句'

如何将onhand_inventory的数据与子查询中的映射进行比较。

1 个答案:

答案 0 :(得分:1)

您已加入映射表,因此您不需要子查询。

$prodarr = DB::table('onhand_inventory')
            ->leftJoin('mapping', 'onhand_inventory.sku', '=', 'mapping.sku')
           ->leftJoin('order_products', 'order_products.sku', '=', 'onhand_inventory.sku')
            ->leftJoin('vendors', 'mapping.v_id', '=', 'vendors.vid')
            ->where('onhand_inventory.shipped_with_box', 0)
            ->orderBy('mapping.mid', 'desc')
            ->groupBy('onhand_inventory.inv_id')
            ->orderBy('onhand_inventory.inv_id')
            ->limit(1)
            ->get();

我没有运行代码,但我希望这会有所帮助。