Laravel/Eloquent 关系不一致
Laravel/Eloquent Relationship Inconsistent
我正在尝试获取与我的数据库中的应用程序关联的信息。
- 每个申请有1个申请人。
- 每个应用程序有 1 只小狗。
我正在返回一个带有 eloquent 查询的视图,如下所示:
$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');
}
加载视图时,我能够获取与 'puppy' 关联的信息。它正确检索。但是,申请人保持为空。
我在我的应用程序 table 中有一个名为 "user_id" 的列,我希望它会使用该列中的值来搜索用户 table 'id',并检索有关用户的信息。但是,它保持为空。以下是相关变量的 dd():
我是不是遗漏了什么明显的东西?为什么它会检索一个而不检索另一个?
编辑:小狗 table
改为尝试以下行:
$active_applications = Application::with(['applicant', 'puppy'])->where('kennel_id', '=', $user_kennel->id)->get();
据我所知,多个 "with" 应该作为数组传递。
也调整关系
public function applicant(){
return $this->belongsTo('App\User', 'user_id');
}
你的关系错了-
public function applicant(){
return $this->belongsTo('App\User');
}
当您不将外键作为参数传递时,laravel 会查找 method name
+ '_id'
。因此,在您的情况下,laravel 正在您的应用程序 table.
中查找列 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。
我正在尝试获取与我的数据库中的应用程序关联的信息。
- 每个申请有1个申请人。
- 每个应用程序有 1 只小狗。
我正在返回一个带有 eloquent 查询的视图,如下所示:
$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');
}
加载视图时,我能够获取与 'puppy' 关联的信息。它正确检索。但是,申请人保持为空。
我在我的应用程序 table 中有一个名为 "user_id" 的列,我希望它会使用该列中的值来搜索用户 table 'id',并检索有关用户的信息。但是,它保持为空。以下是相关变量的 dd():
我是不是遗漏了什么明显的东西?为什么它会检索一个而不检索另一个?
编辑:小狗 table
改为尝试以下行:
$active_applications = Application::with(['applicant', 'puppy'])->where('kennel_id', '=', $user_kennel->id)->get();
据我所知,多个 "with" 应该作为数组传递。
也调整关系
public function applicant(){
return $this->belongsTo('App\User', 'user_id');
}
你的关系错了-
public function applicant(){
return $this->belongsTo('App\User');
}
当您不将外键作为参数传递时,laravel 会查找 method name
+ '_id'
。因此,在您的情况下,laravel 正在您的应用程序 table.
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。