Конвертируйте необработанный SQL-запрос в Laravel Eloquent с помощью быстрой загрузки - PullRequest
0 голосов
/ 21 января 2019

У меня большие трудности при попытке преобразовать следующий запрос в Eloquent.

SELECT Sum(t.amount) AS amount, 
       m.name 
FROM   transactionsv2 t 
       JOIN channels c 
         ON t.entityid = c.uuid 
       JOIN merchants m 
         ON c.sender = m.uuid 
WHERE  t.paymenttype = 'DB' 
       AND t.status = 1 
       AND t.processing_time >= '2019-01-01' 
       AND t.processing_time < '2019-01-21' 
GROUP  BY m.name; 

Это то, что у меня есть, но набор результатов неверен ...

public function getTransactionsVolumeReport()
{
    $report = Transaction::select(DB::raw('sum(amount) as amount, entityId'))
        ->where('paymentType', '=', 'DB')
        ->where('status', 1)
        ->where('processing_time', '>=', '2019-01-01 00:00:00')
        ->where('processing_time', '<=', '2019-01-21 23:59:59')
        ->with(['channel' => function ($q) {
            $q->select('uuid', 'name', 'sender');
        }])
        ->with(['channel.merchant' => function ($q) {
            $q->select('uuid', 'name')
                ->groupBy('name');
        }])
        ->get();

    echo $report;
}

Это запросы, которые показывает отладочная панель Laravel ...

enter image description here

Ниже приведены мои отношения Eloquent ...

Transaction Model

protected $with = ['channel', 'statusPayment'];

public function channel() {

    return $this->hasOne(Channel::class, 'uuid', 'entityId');
}

-----

Channel Model

protected $with = ['merchant', 'attachedMerchantAccount'];

public function merchant() {

    return $this->hasOne('App\Merchant', 'uuid', 'sender');
}
...