我正在尝试加载嵌套关系,但是我无法返回正确的结果。
以下是模型:
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
我该怎么做?
答案 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