Laravel/Eloquent 关系不一致

Laravel/Eloquent Relationship Inconsistent

我正在尝试获取与我的数据库中的应用程序关联的信息。

我正在返回一个带有 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。

Review Laravel doc for more details