Php 拉威尔得到二级关系

Php 拉威尔得到二级关系,php,laravel,model-view-controller,orm,database-relations,Php,Laravel,Model View Controller,Orm,Database Relations,我有三个数据库表: +------+-----------+---------------------+ | user | user_type | user_type_relations | +------+-----------+---------------------+ 每个用户可以有许多类型,但一个用户类型只能有一个用户。为了存储此关系,我使用第三个关系表,其结构如下: +---------------------+ | user_type_relations | +---------

我有三个数据库表:

+------+-----------+---------------------+
| user | user_type | user_type_relations |
+------+-----------+---------------------+
每个用户可以有许多类型,但一个用户类型只能有一个用户。为了存储此关系,我使用第三个关系表,其结构如下:

+---------------------+
| user_type_relations |
+---------------------+
| id                  |
| user_id             |
| user_type_id        |
+---------------------+
我在模型中定义了如下关系:

用户
型号:

public function userTypeRelations()
    {
        return $this->hasMany('UserTypeRelations', 'user_id', 'id');
    }
public function userTypeRelation()
    {
        return $this->hasMany('UserTypeRelations', 'user_type_id', 'id');
    }
 public function user()
    {
        return $this->hasMany('User', 'id', 'user_id');
    }

    public function userType()
    {
        return $this->hasMany('UserType', 'id', 'user_type_id');
    }
UserType
型号:

public function userTypeRelations()
    {
        return $this->hasMany('UserTypeRelations', 'user_id', 'id');
    }
public function userTypeRelation()
    {
        return $this->hasMany('UserTypeRelations', 'user_type_id', 'id');
    }
 public function user()
    {
        return $this->hasMany('User', 'id', 'user_id');
    }

    public function userType()
    {
        return $this->hasMany('UserType', 'id', 'user_type_id');
    }
用户类型关系
模型:

public function userTypeRelations()
    {
        return $this->hasMany('UserTypeRelations', 'user_id', 'id');
    }
public function userTypeRelation()
    {
        return $this->hasMany('UserTypeRelations', 'user_type_id', 'id');
    }
 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() 
我做错了什么?

您可以通过将多个嵌套关系传递给使用的
的单个调用,将它们加载到一个模型中:

User::with('userTypeRelations.userType') ...

我认为你们的关系是错误的。这实际上是一种多对多关系,这意味着您可以一起摆脱
UserTypeRelations

因此,删除
UserTypeRelations.php
,然后假装该关系不再存在。拉威尔会帮你处理那张桌子

然后在用户模型中,创建函数

public function types()
{
    return $this->belongsToMany('UserType', 'user_type_relations','user_type_id', 'user_id');
}
public function users()
{
    return $this->belongsToMany('User', 'user_type_relations', 'user_id', 'user_type_id');
}
在用户类型模型中添加函数

public function types()
{
    return $this->belongsToMany('UserType', 'user_type_relations','user_type_id', 'user_id');
}
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;
}

谢谢,我不知道。如果我不清楚,很抱歉,但我要做的是首先获取userTypeRelation,然后从返回的ID中获取用户类型。这就是为什么我称它为第二级(不确定这个词是否正确)。+我用
修改了我的代码,只调用了
,但仍然得到了相同的错误OK我更新了代码。我相信他们称之为嵌套关系的Laravel文档。看看这对你是否有效。接得好,我相信这对OP更好