Laravel 4 хочет загрузить агрегат SUM не работает — запрос выполняется, но не возвращается?

У меня есть простая модель Eloquent (Player), и я просто хочу добавить немного данных к возвращаемым данным — сумму всех очков, начисленных игроку, о котором идет речь. Вот что я делаю:

<?php

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Player extends \Eloquent {

use SoftDeletingTrait;

protected $fillable = [];
protected $table = 'players';public function points_to_date()
{
return $this->hasMany('AwardedAction', 'player_id', 'id')->selectRaw('sum(points) as points');
}
}
?>

Вот ответ, который я получаю (обратите внимание, что points_to_date имеет значение null):

{
"data": [
{

"id": 1,
"player_id": "wooly",
"created_at": "2014-09-18 16:35:30",
"updated_at": "2014-09-18 16:35:30",
"deleted_at": null,
"points_to_date": null

}
],
"elapsed": 0.022357940673828
}

Я запускаю профилировщик для запросов SQL и вижу этот запрос:

select sum(points) as points from "awarded_actions"where "awarded_actions"."deleted_at" is null
and "awarded_actions"."id" in (1)

.. поэтому запрос выполняется (и если я запускаю его в БД, он возвращает значение для запроса, поэтому он работает), но не возвращает никаких данных.

Кто-нибудь пытался заставить L4 Eloquent загружать и возвращать агрегированное значение в качестве атрибута возвращаемых данных модели?

0

Решение

Вам нужно всегда select primary key and foreign key отношения, в противном случае Eloquent не сможет сопоставить связанные модели.

Для чего вы хотите сделать это:

public function points_to_date()
{
return $this->hasMany('AwardedAction', 'player_id', 'id')
->selectRaw('player_id, sum(points) as points')
->groupBy('player_id');
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]