在foreach循环中显示具有关系的用户

时间:2017-09-28 07:12:51

标签: php laravel

我希望向所有用户显示关系。目前我有:

FilterController.php

public function getFilter($sport)
    {
        $user = Auth::user();
        $users = $this->model->getUsersByDiscipline($sport);

        return view('filter.' . $sport, compact('user', 'users'));
    }

user.php的

public function getUsersByDiscipline($sport)
    {
        $users = User::with('user_data', 'languages')->where('discipline', $sport)->get();

        return $users;
    }

我尝试将其显示为:

{{$user->user_data->employment}}

但是有错误:

Property [employment] does not exist on this collection instance

如何正确地做到这一点?

2 个答案:

答案 0 :(得分:0)

$users = User::with('user_data', 'languages')->where('discipline', $sport)->get();
通过这样做你将得到$ users

的数组

所以你需要运行一个循环

@foreach($users as $user)
   {{ $user->user_data()->employment }}
@endforeach

或者您可以在控件中调试代码

    $users = User::with('user_data', 'languages')->where('discipline', $sport)->get();

    foreach($users as $user){
       dd($user->user_data()); //check what it returns in user_data;
   }

答案 1 :(得分:0)

如果employment是关系,我认为它尚未加载。因此,您可以使用嵌套的预先加载来加载。

在您的雄辩查询中,您可以使用:

$users = User::with('user_data.employment', 'languages')->where('discipline', $sport)->get();

请注意,employment的点语法是user_data的关系,现在可以通过以下方式加载和访问:$user->user_data->employment

参考:https://laravel.com/docs/5.5/eloquent-relationships#nested-eager-loading