Laravel通过声明

时间:2016-10-10 13:15:55

标签: laravel laravel-5.2

我想通过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过滤项目的解决方案。

2 个答案:

答案 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();
}