首页 > 解决方案 > 使用 Eloquent 时在 laravel 中为 foreach() 提供的参数无效:关系

问题描述

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

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

谢谢你的帮助。

我的路线:

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');
    }

标签: laravelforeacheloquent

解决方案


看起来您可能在User模型上设置了错误的关系。您设置了一对多,但您的数据库设置为处理多对多。我建议你改变你的用户模型关系:

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

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

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

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

推荐阅读