2017-02-01 33 views
2

我在尝试加载嵌套关系,但我无法返回正确的结果。雄辩 - 在嵌套关系上使用急切加载时出现问题

下面是型号:

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

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

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

正确nested eager loading语法是:

User::with('universities.university') 

此外,还要确保你使用正确的外键在university表:

user_university_id 

或定义的关系的另一个关键:

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