Laravel Eloquent Query Выбрать столбец из нескольких таблиц - PullRequest
0 голосов
/ 17 октября 2019

У меня есть бэкэнд Laravel и веб-интерфейс VueJS.

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

Models

  • Контракт (CONTRACT_TYPE, CONTRACT_PRICE)
  • AdditionalInfo (START_DATE)

Мой красноречивый запрос

public function contractsByYear() {
   return Contract::where('CONTRACT_TYPE','LIKE','SP-%')->with(['AdditionalInfo' => function($query) {
       $query->selectRaw('MONTH(START_DATE) as Month')->whereYear('START_DATE','2019');
   }])->sum('CONTRACT_PRICE')->groupBy('Month');
}

Ожидаемые результаты

MONTH | TOTAL
1     | 500
2     | 233
3     | 800
etc

Моя проблема в том, что структура таблицы существует, и я не могу редактировать. Почему START_DATe хранится в отдельной таблице, я не знаю.

1 Ответ

0 голосов
/ 17 октября 2019

Методы сбора, вероятно, будут делать то, что вы хотите

public function contractsByYear()
{
    return Contract::select('id', 'CONTRACT_PRICE') /* Only really need the id (or whatever else is the pk) and the price */
    ->where('CONTRACT_TYPE','LIKE','SP-%')
    ->with(['AdditionalInfo' => function($query) {
        $query->select('id', 'contract_id')         /* Only really need the id (or whatever else is the pk), and the Contract fk*/
        ->selectRaw('MONTH(START_DATE) as Month')   /* Aggregate the month */
        ->whereYear('START_DATE','2019');
    }])
    ->get()
    // From this point on, it's a Collection
    ->groupBy('AdditionalInfo.*.Month')             /* It's either this or 'AdditionalInfo.Month' */
    ->map(function($item, $key) {
        return [
            'month' => $key,
            'total' => $item->sum('CONTRACT_PRICE')
        ];
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...