Eloquent - 在嵌套关系上使用急切加载时遇到问题

时间:2017-02-01 17:06:20

标签: php laravel eloquent

我正在尝试加载嵌套关系,但是我无法返回正确的结果。

以下是模型:

user.php的

class User extends Model
{
    public function universities()
    {
        return $this->hasMany('\StudentApp\Models\UserUniversity');
    }
}

UserUniversity.php

class UserUniversity extends Model
{
    protected $fillable = [ 'user_id', 'university_id', 'choice' ];

    public function university()
    {
        return $this->hasOne('\StudentApp\Models\University');
    }
}

University.php

class University extends Model
{
    protected $table = 'university';
}

我想要做的是按ID获取用户,从UserUniversity数据透视表中获取用户大学,然后从University表中获取该大学的名称。

我已尝试以下测试是否有效:

$user = User::with('universities')->find($this->jwtObject->uid);
return $response->withJson($user->universities[0]->university);

但是我收到以下错误:

Column not found: 1054 Unknown column 'university.user_university_id' in 'where clause' (SQL: select * from `university` where `university`.`user_university_id` = 10 and `university`.`user_university_id` is not null limit 1) [] {"uid":"28c5a97"}

user.user_university_id不正确。该列不存在,我不确定为什么它会尝试使用该列。

它应该使用的是user.university_id

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您应该在关系中添加外键和主键:

public function universities()
{
    return $this->hasMany('\StudentApp\Models\University', 'university_id', 'id');
}

答案 1 :(得分:0)

正确的nested eager loading语法是:

y=
1.2345679E14
a=
0.00012465644

另外,请确保您在User::with('universities.university') 表格中使用了正确的外键:

university

或者在关系中定义另一个键:

user_university_id