【问题标题】:Laravel saving part of query into a variable | Variable only works once [duplicate]Laravel 将查询的一部分保存到一个变量中 |变量只工作一次[重复]
【发布时间】:2022-11-29 21:54:47
【问题描述】:

我将查询的一部分保存到变量 $base_query 中,如下所示:

$base_query = DB::connection('mysql_live')->table('users_transactions_all')
->whereDate('users_transactions_all.date_added', '>=', $start_date)->whereDate('users_transactions_all.date_added', '<=', $end_date)
->join('users', 'users.id', '=', 'users_transactions_all.user_id')
->when($data->regcountry != "all", function ($query) use ($data) {
    return $query->whereIn('users.regcountry', $data->regcountry);
});

在下一步中,我像这样使用它并且它有效:

$payments = $base_query->select('users_transactions_all.date_elem AS date',
        DB::raw("SUM(users_transactions_all.eur_amount) as eurAmount"),
        DB::raw("SUM(users_transactions_all.partner_payout_eur) as eurPayoutPartner"),
        DB::raw("COUNT(users_transactions_all.id) as count"))
        ->groupBy('date')->get();

之后我有问题。如果我想重用这个变量,我会得到一个错误:

$packages = $base_query->select(DB::raw("COUNT(users_transactions_all.package_name) as count"),
DB::raw("SUM(users_transactions_all.eur_amount) as eurAmount"), 'users_transactions_all.package_name')
->groupBy('users_transactions_all.package_name')->get();

错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'date' in 'group statement'

在第二次调用中,如果我只是用它的内容替换 $base_query var,那么一切正常。看起来 var 在我第一次使用它时不知何故被消耗了并且不能被重复使用,这是怎么回事?我怎样才能重用它?

【问题讨论】:

标签: mysql laravel eloquent


【解决方案1】:

在第一个函数中,当您向它添加 ->select 时,您实际上更改了 $base_query 变量。您可以克隆变量并像那样使用它。

$baseQueryClone = clone $base_query;

将其写在第一个函数之上,并在该函数中使用您的克隆,在第二个函数中使用 base_query。

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2022-01-14
    相关资源
    最近更新 更多