紧凑():未定义的变量:用户

compact(): Undefined variable: users

这里我试图获取所有项目->id,它们与 team->project_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 table 中的 members 列实际包含 ID。

2) compact() 的用法是正确的,但如果您的 $user 为空,那么您将尝试从中获取未定义的 属性。此外,如果最后一次迭代是空的,那么你会覆盖你的变量,那么你的 $user 是空的,所以你只是 return 前端中的一个空数组。

3) 使用whereIn意味着你的列有超过1个Ids。这通常是一种不好的做法。您应该使用数据透视表 table 或将每条记录存储在不同的行中。

4) 预定义数组。如果没有团队,将永远不会访问 foreach 循环,从而导致 php 错误未定义 $users.