Laravel - Выберите конкретные столбцы из объединенных моделей отношений, используя Eloquent - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь выбрать определенные столбцы из таблиц, к которым я присоединился, используя Eloquent.

у меня 3 модели - сделка - канал - Торговец

Транзакции ссылки на канал. У него есть отношения hasOne. Канал ссылки на продавца. Он также имеет отношение hasOne.

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

public function merchant() {
    return $this->hasOne('App\Merchant', 'uuid', 'sender');
}

Я использую нетерпеливую загрузку, поэтому в модели транзакций укажите следующее:

protected $with = ['channel'];

И канал имеет:

protected $with = ['merchant']:

Этот запрос я пытаюсь преобразовать в Eloquent, но я не уверен, как выбирать столбцы, когда они принадлежат связанным моделям. Чего я не понимаю, так это того, что если отношения определены, почему я не могу выбирать столбцы из других моделей, не используя повторно объединения или предложение with?

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;

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы можете попробовать что-то вроде этого:

Transaction::sum('amount')
    ->whereStuf(...)
    ->with(['channel.merchant' => function($query){
        $query->select('name')
            ->groupBy('name');
    }])->get();

channel.merchant позволяет получить вложенное отношение.

0 голосов
/ 21 января 2019

Вы можете сделать что-то вроде protected $with = ['merchant:id,name']; или, возможно, использовать необработанные выражения как selectRaw('SUM(t.amount) AS amount, m.name)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...