使用雄辩时,为laravel中的foreach()提供了无效的参数:

时间:2019-07-12 15:24:17

标签: laravel foreach eloquent

我想通过用户ID获得用户的类名。当我输入用户ID时,我想获取类名。我有三个表,例如users表,classes表和class_users表。 class_users表是从两个users表和classes表中诞生的。

  • 一个users表具有一个id, name, email, password
  • 一个classes表具有一个id, class_code, class_name
  • 一个class_users表具有一个id, class_id, user_id

这个问题与雄辩的关系有关。

谢谢您的帮助。

我的路线:

Route::get('/find_classes/{id}','StudentController@find_classes');

我的控制器功能:

public function find_classes($id)
    {
        $users = User::find($id);

        foreach($users->classes as $class)
        {
            echo $class->name . '<br';
            dd($class);
        }
    }

我的用户模型:

public function classes()
    {
    return $this->belongsTo('App\Classes','class_users','user_id','class_id');
    }

1 个答案:

答案 0 :(得分:0)

看起来您在用户模型上建立的关系可能不正确。您进行了一对多设置,但您的数据库已设置为可以处理多对多。建议您更改您的用户模型关系:

public function classes()
{
    return $this->belongsToMany('App\Classes');
}

请注意,您可能需要在该关系上命名FK,因为我看到表上有class_id,但实际的类名为“ Classes”。检查您的关系,以确保这在FK上是明确的,而FK并未完全遵循Laravel约定。

有了这种关系,您的foreach循环应该可以工作了。正如mare96所指出的,这是提高效率的一个好主意,当您查询时,急于在$ users集合上加载类:

$users = User::with('classes')->find($id);