在这里,我试图获取所有与团队>project_id匹配的项目>id,并且关系正在工作,但我使用变量$users显示未定义。可能是什么问题??
这是控制器代码
public function index()
{
if (Auth::user()->role->id == 1) {
$projects = Project::all();
$teams = Team::all();
foreach ($teams as $team) {
$users = User::whereIn('id', $team->members)->get();
}
return view('project.index', compact('projects', 'users'));
}
}
您没有将用户初始化为条件,因此如果没有团队,则不会有用户:
试试这个:
$users = collect();
foreach ($teams as $team) {
$users = User::whereIn('id', $team->members)->get();
}
return view('project.index', compact('projects', 'users'));
但请记住,您的循环每次都会覆盖用户,因此您只会从最后一个团队获取用户:D
你的问题出在你的循环中。
代码中有一些模糊的部分。
1(在每个循环中,您都会覆盖$users
变量: 我假设你需要一个数组,所以尝试如下:
$users[] = User::whereIn('id', $team->members)->get();
*小注释 确保Team
表中members
列实际包含 ID。
2(compact()
的用法是正确的,但是如果您的$user
为空,那么您将尝试从中获取未定义的属性。此外,如果最后一个迭代为空,则重写变量,则$user
为空,因此您只需在前端返回一个空数组。
3(使用whereIn
意味着您的列具有超过1个Ids
。这通常是一种不好的做法。您应该使用数据透视表或将每条记录存储在不同的行中。
4( 预定义您的数组。如果没有团队,将永远无法访问foreach
循环,从而给您留下未定义$users
的 php 错误。