【问题标题】:How to build a Laravel query with joins and sum?如何使用连接和求和构建 Laravel 查询?
【发布时间】:2019-04-01 05:23:07
【问题描述】:

我正在尝试在 Laravel 应用程序中配置与此等效的查询:

SELECT SUM(balance), name FROM db.statement_versions
INNER JOIN statements ON statement_versions.statement_id = statements.id
INNER JOIN accounts ON statements.account_id = accounts.id
GROUP BY name;

当我在 MySQL Workbench 中运行此查询时,它可以工作,但是当我尝试使用 Laravel 查询生成器将其转换为 PHP 时,我收到错误消息。我最终想要的是返回所有accounts,它们的总余额为statement_versions.balance。这是我现在的代码:

public static function query(LensRequest $request, $query)
{
    return $request->withOrdering($request->withFilters(
        $query->select('accounts.name')->sum('statement_versions.balance')
            ->join('statements', 'statement_versions.statement_id', '=', 'statements.id')
            ->join('accounts', 'statements.account_id', '=', 'accounts.id')
            ->orderBy('balance', 'desc')
            ->groupBy('statement_versions.balance', 'accounts.name')
    ));
}

我已经尝试了几个不同的变体,但我得到了错误SQLSTATE[42S22]: Column not found: 1054 Unknown column 'statement_versions.balance' in 'field list'。我该如何解决这个问题并让查询正常工作?

【问题讨论】:

  • 什么是$query?发布您的完整代码
  • @Paras 我已经用完整的代码 sn-p 更新了帖子

标签: php mysql laravel laravel-query-builder


【解决方案1】:

没有你的桌子会有点困难,但我希望这会给你一条通往你想要实现的目标的道路,它可能会从第一枪开始工作:)

DB::table('statement_versions as sv')
  ->select([
    'name',
    DB::raw('sum(balance) as total')
  ])
  ->join('statements as s', 'sv.statement_id', '=', 's.id')
  ->join('accounts as a', 's.account_id', '=', 'a.id')
  ->groupBy('name');

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 2020-01-05
    • 2019-06-17
    • 2016-11-25
    • 2015-03-02
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多