当前位置: 首页 > 知识库问答 >
问题:

如何聚合查询相关表的字段在Laravel?

闻人宇定
2023-03-14

在我的laravel 5.4应用程序中,我有一个一对多(反向)关系。有两种型号SaleVehicle与场景相关。

销售模型上的关系为:

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

销售具有以下字段:idvehicle_iddate_time状态等。

车辆包含以下字段:idreg\u编号状态等。

我想要的是,搜索条件中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(vehiclesvolume)作为来自sales的聚合,其中status=1和date\u time

希望等待一个解决方案,使用雄辩的查询“获得销售额的总和”。

  • 编辑

共有2个答案

班宏毅
2023-03-14
select sum(volume) as aggregate from vehicles INNER JOIN sales ON vehicles.id=sales.vehicle_id 
苏季同
2023-03-14

在求和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');
 类似资料:
  • 如何在输出桶中添加名为“agency\u name”的新密钥。 我正在运行一个聚合代码,如下所示 我会把它放出来 在显示时,我需要显示代理名称、代码和doc_count 如何修改聚合查询,以便获得以下格式。我是ElasticSearch新手,不知道如何修复此问题 ElasticSearch中的示例数据(分析字段)

  • >[danger] 注意!!! 使用聚合功能时,必须给它一个别名,以便能够从模型中访问它 > 聚合函数的计算,都是排除了 null 值,所以COUNT( id ) 一般推荐用非空的主键来计算 COUNT 计算数量 const { Sequelize } = app; // 查询班级总人数,按照姓名聚合 const ret = await Student.findAll({ attribut

  • 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 方法 说明 count 统计数量,参数是要统计的字段名(可选) max 获取最大值,参数是要统计的字段名(必须) min 获取最小值,参数是要统计的字段名(必须) avg 获取平均值,参数是要统计的字段名(必须) sum

  • 我需要按9个文件分组,并在ElasticSearch中获得每个组的计数,原始代码使用“脚本”,性能很差,所以我需要优化它。我设法创建了一个新的字段并使用“copy_to”,但是当我与新的字段聚合时,我发现了一些问题。 我使用“src ip”和“dst ip”字段作为测试,copy_to字段是“agg condition”。下面是映射: 然后我给它添加一些数据 然后我看到kibana中的映射,它看起

  • 问题内容: 我想使用Django REST Framework,限制可以在创作的相关字段中使用的值。 例如,考虑以下示例(基于http://django-rest-framework.org/api- guide/filtering.html 上的过滤示例,但已更改为ListCreateAPIView): 在此示例中,如何确保购买者在创建时只能等于self.request.user,并且这是可浏览

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢