laravel关系问题多对多的情况下

问题描述:

我有三个表中的MySQL: 1用户 table of users 2项目 table of project 3 project_userlaravel关系问题多对多的情况下

有ID和PROJECT_ID和USER_ID的关系

有两型:用户和项目 这些表之间的关系是belongsToMany 当一个项目创建说不定项目定义了两个人 现在我该怎么让每个人的项目?

如果正确定义你的人际关系,你

$users = User::with('projects')->get(); 

//show each user projects 
foreach($users as $user) { 
    echo $user->projects; 
} 

//Getting project users 
$projects = Project::with('users')->get(); 

这会给你一个项目列表,每个列表中,你可以看到哪些用户具有访问权限或没有。

更新

以项目与指定的user_id

$projects = Project::with(['users' => function ($query) use ($user_id) { 
    $query->where('user_id', '=', $user_id); 
}])->get(); 

新代码 或尝试获取用户

$user = User::with('projects')->where('id', $user_id)->first(); 

或通过项目,由USER_ID

约束
$projects = Project::with('users')->whereHas('users', function ($query) use ($user_id) { 
    $query->where($user_id); 
})->get(); 
+0

看有三个表有两个型号,为用户一个模型,另一个用于项目和心不是为project_user表的任何模式。当我为两个用户定义一个项目时,我需要向那两个用户显示该项目而不是其他用户。并且此规则位于project_user表上。如何在nt有任何型号时选择它?和这三个表是关系 –

+0

检查我的更新。您可以获取用户并查看他们的所有项目。或者获得一个项目,并查看所有有权访问的用户。 – EddyTheDove

+0

对不起,我检查你的更新,但有一个问题:你知道我需要让项目具有特定的user_id在一个project_user Table.Now我有USER_ID但在查询我应该如何使用它? –

据我了解你的问题,你想查询Project根据user_id。这是你如何做到的。

Project::with('users')->whereHas('users', function ($query) use ($user_id_array) { 
     $query->whereIn('id',$user_id_array); 
    })->get(); 

这会给你一个项目,其user_id$user_id_array。让我知道你是否需要任何进一步的帮助。

+0

我在JSON发送用户ID:比如我有项目的用户ID 2.now错误是未定义的变量:user_id_array? –

+0

我发送用户ID JSON:比如我有项目的用户ID 2。现在错误是缺少参数2的照明\数据库\查询\建设者:: whereIn(),调用... –

我解决问题的方法:

//save user_id 
$user_id = $request->id; 
//select in project_user where user_id = $user_id 
$project_user = DB::table('project_user')->where('user_id', '=', $user_id)->get(); 
//create an empty array 
$p_id = array(); 
//fill empty array with project_id 
foreach($project_user as $pro) { 
$p_id[] = $pro->project_id; 
} 
//select code and id in project table where id = one of that [$p_id] array 
$data = Project::select('code','id')->whereIn('id', $p_id)->get(); 
//return your data in json 
return response()->json($data);