我想通过Auth::user()
和company_id
获取项目。我创建了以下内容:
数据库:
projects:
- id
- name
- company_id
project_users:
- id
- project_id
- user_id
users:
- id
- name
- email
companies:
- id
- name
所以我想获得属于company_id的当前用户项目。
我使用User Modal -> return $this->hasManyThrough('App\ProjectUsers', 'App\Project')
尝试了以下操作。 $user->projects->where('company_id', 1)
但它返回所有数据(也包括company_id 2,3,4等)。
我正在寻找一个可以使用company_id 1过滤项目的解决方案。
答案 0 :(得分:0)
您必须在用户模型中创建功能
public function projectusers() {
return $this->hasMany('App\Models\project_users', 'projectID')->with('companies');
}
现在在模型项目中创建函数
public function companies() {
return $this->hasMany('App\Models\companies','id', 'company_id');
}
答案 1 :(得分:0)
如果您尝试根据其他关系的结果限制关系,则需要使用whereHas
。
此外,如果你想在某些条件下获得项目,我发现通常最有帮助的是开始项目。
$projects = App\Project::whereHas('company', function($q) use ($company_id) {
$q->where('id', $company_id);
})->with('users')->get();
这将只获取属于某个公司的项目,并且还会急切地加载用户。
在循环播放时,您可以使用该关系获取用户的数量。
foreach ($projects as $project) {
echo 'Num User: '.$project->users->count();
}