2016-10-10 55 views
1

我想通过Auth::user()company_id获得项目。我创建了以下内容:Laravel hasmanythrough where语句

数据库:

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

hasManyThrough是否从您的用户模型的项目方法返回? – Devon

+0

hasManyThrough从用户模型返回。 –

+0

您应该只发布您的用户模型代码。 – Devon

回答

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'); 
} 
+0

如何仅在'company = 1'的地方获得项目? –

+0

return $ this-> hasMany('App \ Models \ companies','id','company_id') - > where('company',1); – Vipul

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(); 
} 
+0

链接到项目的用户位于单独的表project_users中。该项目可以有0个或更多的用户。 –

+0

因此'whereHas('user'...)'。它应该工作。 – user3158900

+0

哦,我明白你在说什么,我认为这与你想要的接近,但是如果可以有0,1个或多个用户,你如何得到用户的项目? – user3158900