我想数一下有多少候选人参加比赛。
我有四张table:
大赛
- ID
- 名称
- 从
- 直到
空缺
- ID
- 竞赛ID
- 名称
- 描述
用户
- ID
- 名称
- 数据透视表:*
用户_空缺
- ID
- 用户标识
- 空缺ID
- 我的比赛模特 *
protected $fillable = [
'name',
'from',
'until',
'description',
];
public function vacancies()
{
return $this->hasMany(Vacancy::class);
}
public function candidates()
{
return $this->hasManyThrough(User::class, Vacancy::class);
}
字符串
- 我的空缺模型 *
public function contest()
{
return $this->belongsTo(Contest::class);
}
public function candidates()
{
return $this->belongsToMany(User::class, 'user_vacancy');
}
型
- 我的用户模型 *
public function vacancies()
{
return $this->belongsToMany(Vacancy::class, 'user_vacancy');
}
型
- 我的控制器 *
public function index()
{
$contests = Contest::with('vacancies.candidates')
->get();
return view('contests.index', compact('contests'));
}
型
我得到了这个错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.vacancy_id' in 'on clause'
select
count(*) as aggregate
from
`users`
inner join `vacancies` on `vacancies`.`id` = `users`.`vacancy_id`
where
`vacancies`.`contest_id` = 2
型
当我这样做时:
@foreach($contests as $contest)
<tr>
<td>1</td>
<td>{{ $contest->name }}</td>
<td>{{ date('d.m.Y', strtotime($contest->from)) }}</td>
<td>{{ date('d.m.Y', strtotime($contest->until)) }}</td>
<td>{{ $contest->vacancies()->count() }}</td>
{{-- TODO: Topshirilgan xujjatlar sonidan kelib chiqib Nomzodlar soni shaklanadigan qilish kerak --}}
<td>{{ $contest->candidates()->count() }}</td>
<td>75 ta</td>
@endforeach
[1]: https://i.stack.imgur.com/cc57S.png
[2]: https://i.stack.imgur.com/n3rOV.png
型
3条答案
按热度按时间bbuxkriu1#
请将关系候选人的竞赛模型功能更新为以下内容
字符串
zxlwwiss2#
更新候选人关系。
字符串
控制器
型
你也可以使用withCount查询,但我保留了你的原始代码。
叶片
型
ql3eal8s3#
定义模型和关系:
竞赛模式:
字符串
空缺型号:
型
用户型号:
型
然后,您可以查询您的竞赛模型以检索每个竞赛的候选人计数:
型