compact():未定义的变量:用户

时间:2019-11-24 16:52:48

标签: mysql laravel eloquent foreign-keys relation

在这里,我试图获取所有与team-> project_id匹配的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'));
    } 
}

2 个答案:

答案 0 :(得分:1)

您不是在没有超出条件的情况下初始化用户,因此,如果没有团队,就不会有用户:

尝试以下方法:

$users = collect();
foreach ($teams as $team) {
    $users = User::whereIn('id', $team->members)->get();
}
return view('project.index', compact('projects', 'users'));

但是请记住,您的循环每次都会覆盖用户,因此您只会从最后一个团队中获取用户:D

答案 1 :(得分:0)

您的问题就在您的循环中。

您的代码中有些模糊的部分。

1)在每个循环中,您都会覆盖b变量:我将假设您需要一个数组,因此请尝试以下操作:

if a[0] < b[0]:
    return a[0] + orderedConcat(a[1:], b)
else:
    return b[0] + orderedConcat(a, b[1:])

*小注释,请确保$users表中的列 $users[] = User::whereIn('id', $team->members)->get(); 实际包含ID。

2)members的用法是正确的,但是如果Team为空,则您将尝试从中获取未定义的属性。此外,如果最后一个信号为空,则会覆盖变量,然后compact()为空,因此您只需在FrontEnd中返回一个空数组即可。

3)使用$user意味着您的列有1个以上的$user。通常这是一个坏习惯。您应该使用数据透视表或将每条记录存储在不同的行中。

4)预定义数组。如果没有团队,将永远不会访问whereIn循环,从而使您遇到未定义Ids的php错误。