laravel - 使用 Eloquent 时在 laravel 中为 foreach() 提供的参数无效:关系
问题描述
我想通过用户 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');
}
解决方案
看起来您可能在User模型上设置了错误的关系。您设置了一对多,但您的数据库设置为处理多对多。我建议你改变你的用户模型关系:
public function classes()
{
return $this->belongsToMany('App\Classes');
}
请注意,您可能需要在该关系上命名 FK,因为我看到您在表上有 class_id,但您的实际类被命名为“类”。检查您的关系以确保这在 FK 上是明确的,它不完全遵循 Laravel 约定。
有了这种关系,您的 foreach 循环应该可以工作。正如 mare96 指出的那样,在查询时急切加载 $users 集合上的类将是一个提高效率的好主意:
$users = User::with('classes')->find($id);
推荐阅读
- c# - 构建 Azure Function v3 时无法解析程序集“Microsoft.AspNetCore.Mvc.Core,版本=3.1.0.0”
- python - Python VS Code 产生过多的输出
- python - 修改现有 Pytorch 代码以在多个 GPU 上运行
- solr - Solr:在文章上运行 TF-IDF 并获取过滤后的内容
- python-3.x - 从列表中填充数据
- java - 类 java.util.ArrayList 不能转换为类 org.springframework.util.MultiValueMap
- python - 当我手动单击链接时,Python 和 Selenium 会弹出一个对话框,而不是自动下载
- .net-core - tweetinvi RegisterWebhookAsync 401 - 未经授权 - 身份验证凭据丢失或不正确
- javascript - 是否可以使用 java/spring boot 关闭浏览器的当前选项卡
- java - Spring Security httpBasic 404 以获得正确的凭据