0

我正在尝试用 laravel eloquent 替换 mysql 查询。这是我的结构。

Consumers Table
---------------
id, email, name

Transactions Table
-------------------
id, consumer_id, value, bonus_value

我试图实现的输出

id, email, name, total_value
1, abc@123.com, Al, 11000
2, abc2@123.com, Bl, 200000

这是我添加的Consumer.php

/**
     * Transactions Relationship
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function transactions(){
        return $this->hasMany(Transaction::class, 'consumer_id');
    }

这是我到目前为止写的查询。

$query = Consumer::query()
                ->join('consumer_transactions AS ct', function($q) {
                    $q->on('consumers.id', '=', 'ct.consumer_id')
                        ->where('ct.status', 'processed')
                        ->where('ct.approved', 1)
                        ->select(DB::raw('SUM(ct.value + ct.bonus_value) AS total_points'))
                    ;
                })
                ->whereIn('consumers.id', $consumerIds)
                ->get()
            ;

它不返回total_points

4

2 回答 2

1

传递给您的 join take 女巫的Join 子句Illuminate\Database\Query\JoinClause没有名为“select”的方法。

select应该不在连接子句中。

$query = Consumer::query()
                ->join('consumer_transactions AS ct', function($q) {
                    $q->on('consumers.id', '=', 'ct.consumer_id')
                        ->where('ct.status', 'processed')
                        ->where('ct.approved', 1);
                })
 ->select( ['consumers.*', DB::raw('SUM(ct.value + ct.bonus_value) AS total_points')])
                ->whereIn('consumers.id', $consumerIds)
                ->get();
于 2021-03-20T11:57:35.347 回答
1

我不喜欢加入表格。这就是为什么我可以为您提供不同的方法。

$consumers = Consumer::whereIn('id', $consumerIds)
                ->with(['transactions' => function($query) {
                    $query
                       ->where('startus', 'processed')
                       ->where('approved', 1)
                }])->get()
                ->map(function($item, $key) {
                   return $item->total_points = $item->transactions->value + $item->transactions->bonus_value
                });
于 2021-03-20T12:00:33.670 回答