从 laravel 的不同表中获取每个 id 的总数
Posted
技术标签:
【中文标题】从 laravel 的不同表中获取每个 id 的总数【英文标题】:get total count in each ids from different table in laravel 【发布时间】:2019-07-04 16:08:38 【问题描述】:我想从另一个名为 assign job 的表中获取每个 id 的总数。我将用户数据保存到我的用户表中,并将 3 个作业添加到分配具有用户 ID 的作业表中。
但现在我想从用户表中的用户 ID 一次分配的作业表中获取所有添加的作业。
这个函数是我写的
$assignjob = DB::table('users')
->join('assign_jobs', 'users.user_id', '=', 'assign_jobs.user_id')
->get()
->count();
但这显示了我分配作业表中的总计数。但我想为每个用户 id 获得不同的计数。
我想用这个分配作业的总计数值来分配不同的颜色行。
谁能帮帮我。
用户表:
|---------------------|------------------|
| user_id | name |
|---------------------|------------------|
| 123 | john |
|---------------------|------------------|
| 234 | peter |
|---------------------|------------------|
分配作业表:
|---------------------|------------------|
| id | user_id |
|---------------------|------------------|
| 1 | 123 |
|---------------------|------------------|
| 2 | 123 |
|---------------------|------------------|
| 3 | 234 |
|---------------------|------------------|
| 4 | 234 |
|---------------------|------------------|
【问题讨论】:
【参考方案1】:您需要为用户的id
列使用GROUP BY
子句,并将COUNT()
添加到您的选择中。试试:
DB::table('users')
->select('users.user_id', DB::raw('COUNT(assign_jobs.user_id) AS jobs_count'))
->join('assign_jobs', 'users.user_id', '=', 'assign_jobs.user_id')
->groupBy('users.user_id')
->get();
【讨论】:
谢谢。有用。如何在我的视图表中显示此数组计数的不同颜色 如何使用此查询在用户表中显示其他详细信息,例如姓名、电子邮件 @KalanaMihiranga 调整->select(...)
方法。如果要从users
表中选择所有列,则将'users.user_id'
切换为'users.*'
。 Check out the documentation 在查询生成器上了解更多信息。
语法错误或访问冲突:1055 'jobnetuva.users.id' 不在 GROUP BY 中
@Kalana 你确定我们在这里谈论的是 mysql 吗?因为默认情况下 MySQL 允许对非聚合列使用部分 group by
子句,并且不应产生任何错误。 Check answer to this question。所以要解决这个限制,你必须groupBy(...)
所有你想从users
中选择的列(不仅仅是user_id
)。【参考方案2】:
选择不同的用户 ID 循环到其中以计算每个用户的计数
【讨论】:
【参考方案3】:试试这个:
添加以下与用户模型的关系:
public function assignJobs()
return $this->hasMany(AssignJob::class, 'user_id', 'user_id');
在控制器中:
User::withCount('assignJobs')->get();
【讨论】:
以上是关于从 laravel 的不同表中获取每个 id 的总数的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2 Eloquent ORM 从 3 个表中获取数据