2016-06-13 3 views
0

Я сейчас царапаю голову этим.Laravel hasOne + group_by, получите сумму

Что у меня есть.

$entries = Meta::whereIn('settlement_id', [1])->groupBy('client_id')->get();

Meta::model() имеет hasOne связь с другими таблицами, в моем примере с Sport столом. С одним атрибутом в моем массиве я могу добиться того, чего хочу.

Так что в петле у меня есть мое поле $entry->Sport->amount это прекрасно работает.

Что мне нужно.

$entries = Meta::whereIn('settlement_id', [1,2,3])->groupBy('client_id')->get();

Теперь, когда я расширяю свой массив с несколькими идентификаторами, я ожидаю, что $entry->Sport->amount возвращает сумму всех идентификаторов. Но это не так.

Я не могу понять, что я делаю неправильно.

Вся помощь приветствуется.

+0

Вы говорите, что он ожидает от него вернуть сумму всех идентификаторов, то, что делает * * он вернется в данный момент? – ntzm

+0

Он возвращает значение первой найденной записи, а не сумму всех полей. – DavidCandreva

ответ

0

Ваше hasOne соотношение означает, что каждый Meta будет иметь отдельный Sport, поэтому, когда вы цикл $entries каждый $entry->Sport будет иметь количество, связанные с текущей Meta, а не сумма всех из них.

Если вы хотите иметь сумму Sport суммы для конкретного Meta ы может быть проще сделать запрос из Sport модели, что-то вроде этого (я не знаю, как ваши отношения является установки, так что это просто пример):

Sport::whereIn('meta_id', [1,2,3])->sum('amount');

0

то правильно, есть способ, что я могу добиться этого? Изменив hasOne на что-то еще?

Я не хочу запрашивать каждую конкретную связанную таблицу Meta.

public function Sport() { return $this->hasOne('App\Sport', 'settlement_meta_id'); }

моя база данных таблицы Спорт выглядит следующим образом:

protected $fillable = [ 'settlement_meta_id', 'bet', 'payout' ];

Смежные вопросы