我有三个数据库表:
+------+-----------+---------------------+
| user | user_type | user_type_relations |
+------+-----------+---------------------+
每个用户可以有多种类型,但一种用户类型只能有一个用户。为了存储这种关系,我使用第三个关系表,具有以下结构:
+---------------------+
| user_type_relations |
+---------------------+
| id |
| user_id |
| user_type_id |
+---------------------+
我已经在我的模型中定义了这样的关系:
User
型号:
public function userTypeRelations()
{
return $this->hasMany('UserTypeRelations', 'user_id', 'id');
}
UserType
型号:
public function userTypeRelation()
{
return $this->hasMany('UserTypeRelations', 'user_type_id', 'id');
}
UserTypeRelations
型号:
public function user()
{
return $this->hasMany('User', 'id', 'user_id');
}
public function userType()
{
return $this->hasMany('UserType', 'id', 'user_type_id');
}
这就是我在将控制器传递给视图之前尝试访问控制器中特定用户的用户类型的方法:
$users = User::with('userTypeRelations')->with('userType')->orderBy($order)->where('status', 'active')->paginate(10);
我认为首先我得到关系表的值,然后从中我很容易得到每个用户的用户类型,但是我收到以下错误:
BadMethodCallException
Call to undefined method Illuminate\Database\Query\Builder::userType()
我做错了什么?
答案 0 :(得分:1)
我相信你们的关系是错误的。这实际上是多对多的关系,这意味着你可以一起摆脱你的UserTypeRelations
。
所以说,删除UserTypeRelations.php
,然后假装关系不再存在。 Laravel将为您处理该表。
然后在您的用户模型中,创建函数...
public function types()
{
return $this->belongsToMany('UserType', 'user_type_relations','user_type_id', 'user_id');
}
在您的UserType模型中添加函数...
public function users()
{
return $this->belongsToMany('User', 'user_type_relations', 'user_id', 'user_type_id');
}
现在它已不再是嵌套关系。
$user = User::with('types')->find($id);
foreach($user->types as $type) {
echo $type;
}
答案 1 :(得分:0)