我正在尝试获取与我的数据库中的应用程序相关的信息。
- 每个应用程序有 1 个申请人。
- 每个应用程序有 1 只小狗。
我正在返回一个带有如下 Eloquent 查询的 View :
$active_applications = Application::with('applicant', 'puppy')->where('kennel_id', '=', $user_kennel->id)->get();
我在我的应用程序模型中定义了一些关系,如下所示:
public function puppy(){
return $this->belongsTo('App\Puppy');
}
public function applicant(){
return $this->belongsTo('App\User');
}
加载 View 时,我能够获取与“小狗”相关的信息。它正确检索。但是,申请人保持无效。
在我的应用程序表中,我有一个名为“user_id”的列,我希望它会使用该列中的值来搜索用户表“id”,并检索有关用户的信息。但是,它保持为空。以下是相关变量的 dd():
我是否遗漏了一些明显的东西?为什么它会检索一个而不检索另一个?
最佳答案
你的关系错了-
public function applicant(){
return $this->belongsTo('App\User');
}
当你没有将外键作为参数传递时,laravel 会查找方法名
+ '_id'
。因此,在您的情况下,laravel 正在您的应用程序表中查找列 applicant_id
。
因此,要获得结果,有两种方法 -
1) 您需要更改您的方法名称 -
public function user(){
return $this->belongsTo('App\User');
}
**2) 传递外键作为第二个参数 - **
public function applicant(){
return $this->belongsTo('App\User', 'user_id');
}
Laravel 5.6 doc - belongsTo
如果它是一个一对多(反向)关系 -
Eloquent 通过检查名称来确定默认的外键名称 关系方法并在方法名称后缀 _ 后跟主键列的名称。
如果是一对一关系 -
Eloquent 通过检查名称来确定默认的外键名称 关系方法的名称,并在方法名称后加上 _id。
关于php - Laravel/Eloquent 关系不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51621552/