Laravel将查询的一部分保存到变量中|变量只起作用一次[重复]

wgeznvg7  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(114)

此问题在此处已有答案

Laravel query builder - re-use query with amended where statement(3个答案)
昨天关门了。
我将查询的一部分保存到变量$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在我第一次使用时就被消耗掉了,不能重用,这是怎么回事?我怎么才能重用它呢?

h43kikqp

h43kikqp1#

在第一个函数中,当你添加-〉select到$base_query变量时,你实际上改变了它。你可以克隆变量并像这样使用它。

$baseQueryClone = clone $base_query;

在第一个函数的上面写这个,在第一个函数中使用你的克隆,在第二个函数中使用base_query。

相关问题