【问题标题】:How to aggregate query on related table's field in Laravel?如何在 Laravel 中对相关表的字段进行聚合查询?
【发布时间】:2018-02-22 23:17:01
【问题描述】:

我的 laravel 5.4 应用程序有一个一对多(反向)关系。有两个模型SaleVehicle与场景相关联。

Sale 模型上的关系是:

public function vehicle()
    {
        return $this->belongsTo('App\Models\Vehicle','vehicle_id');
    }

sales 具有以下字段: idvehicle_iddate_timestatus

vehicles 具有以下字段: idreg_numbervolumestatus

我想要的是搜索条件内Sale 记录的“vehicles.volume”字段的总和。

我尝试了一些方法,如下所示:

$query = Sale::where('status', 1);
$query = $query->where('date_time', '<', "2017-05-10 10:10:05");
$totalVolume  = $query->whereHas('vehicle')->sum('vehicles.volume');

它导致了以下错误:

SQLSTATE[42S22]:未找到列:1054 未知列 '字段列表'中的'vehicles.volume'(SQL:选择 sum(vehicles.volume) 作为来自sales 的聚合,其中status = 1 和date_time vehicles 中选择*,其中sales.vehicle_id = vehicles.id))

希望等待使用 eloquent 查询“获取销售量总和”的解决方案。

  • 已编辑

【问题讨论】:

  • 我认为您应该首先写出如果您直接使用 Workbench 将运行的原始 MySQL 查询。然后,基于此,构建 Laravel 查询。如果你不能编写 MySQL 查询,那么你可能还没有准备好攻击 Laravel 方面。

标签: php mysql laravel laravel-5.4


【解决方案1】:

在对vehicles.volume 列求和之前需要使用连接

$totalVolume = Sale::where('status', 1)
    ->where('date_time', '<', "2017-05-10 10:10:05")
    ->join('vehicles', 'vehicles.id', '=', 'sales.vehicle_id')
    ->select(DB::raw('sum(vehicles.volume) as total_volume');

【讨论】:

  • 谢谢 Martin.. $totalQuantity = $totalQuantityQuery-&gt;join('vehicles', 'vehicles.id', '=', 'sales.vehicle_id')-&gt;select(\DB::raw('sum(vehicles.volume) as total_volume'))-&gt;get() 给出了一个数组内的对象.. 提取结果使用.. $totalQuantity[0]-&gt;total_volume
【解决方案2】:
select sum(volume) as aggregate from vehicles INNER JOIN sales ON vehicles.id=sales.vehicle_id 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    相关资源
    最近更新 更多