【发布时间】:2014-06-18 07:38:59
【问题描述】:
逻辑:一个用户有很多积分。
控制器:
public function getAdminAccount()
{
$company = User::find(Auth::user()->id)
->companies()
->with('users.credits')
->first();
$this->layout->content = View::make('agents.admin.account',
array('company' => $company));
}
我的控制器函数正在返回我需要的 JSON 数据中的正确数据,但是,我想根据 user_id 计算结果,最好是在它们显示在视图中之前。
JSON:
[
{
"id":"4",
"user_id":"4",
"credits":"10",
"created_at":"2013-09-30 09:39:25",
"updated_at":"0000-00-00 00:00:00"
},
{
"id":"67",
"user_id":"4",
"credits":"6",
"created_at":"2013-08-05 12:40:25",
"updated_at":"0000-00-00 00:00:00"
}
][
{
"id":"6",
"user_id":"6",
"credits":"9",
"created_at":"2013-06-25 16:24:18",
"updated_at":"0000-00-00 00:00:00"
},
{
"id":"69",
"user_id":"6",
"credits":"2",
"created_at":"2014-01-16 10:09:55",
"updated_at":"0000-00-00 00:00:00"
}
]]
所以,对于那个 JSON 结果,它应该是这样的:
- user_id:4,总积分:16
- user_id:6,总积分:11
据我所知,在控制器中格式化 JSON 是有益的,而不是视图。我试过->sum()、->groupBy()等功能,都没有成功。
谢谢。
更新
public function getAdminAccount()
{
$company = User::find(Auth::user()->id)
->companies()
->with('users.credits')
->get()
->sum('credits');
$this->layout->content = View::make('agents.admin.account', array('company' => $company));
}
上面的函数把学分总数加起来,和我需要的很接近!我只需要构成总数的每个用户的积分数!
更新
使用这个 forloop 似乎返回了正确的 MYSQL 逻辑,但仍然不是正确的值:
@foreach ($company->users as $user)
{{ $user->credits()->count('credits') }}<br>
@endforeach
MYSQL:
select count(`credits`) as aggregate from `usages` where `usages`.`user_id` = '4'
【问题讨论】:
-
不是一个答案,但是为什么你运行一个查询来只获取 id,然后再运行一个查询来获取整个公司的 id?在
companies()之后继续with应该就足够了。 -
因为请求对应的是用户所在的公司。所以第一行算出用户被分配到哪个公司,然后我有公司的ID来获取用户的积分。
-
$company = User::find(Auth::user()->id)->companies()->with('users.credits')->first();? -
谢谢你,让我的查询更有效率,但是,我仍然无法统计每个用户的积分!
标签: php json laravel laravel-4