laravel/雄辩关系不一致

2vuwiymt  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(507)

我正在尝试获取数据库中与应用程序相关的信息。
每个申请有一个申请人。
每个应用程序有一只小狗。
我用这样一个雄辩的问题来回答一个观点:

$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”相关的信息。它能正确地检索。然而,申请人保持无效。
在我的applications表中有一个名为“user\ id”的列,我希望它能使用该列中的值来搜索users表“id”,并检索有关该用户的信息。但是,它保持为空。以下是有关变量的dd():

我是不是漏掉了什么明显的东西?为什么它要取回一个而不是另一个?
编辑:小狗表

vyswwuz2

vyswwuz21#

请改为尝试以下行:

$active_applications = Application::with(['applicant', 'puppy'])->where('kennel_id', '=', $user_kennel->id)->get();

据我所知,多个“with”应该作为数组传递。
也要调整关系

public function applicant(){
  return $this->belongsTo('App\User', 'user_id');
}
fhg3lkii

fhg3lkii2#

你的亲戚错了-

public function applicant(){
  return $this->belongsTo('App\User');
}

如果不将外键作为参数传递,laravel将查找 method name + '_id' . 因此,在你的情况下,拉威尔正在寻找列 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文件-belongsto
如果是一对多(逆)关系-
eloquent通过检查relationship方法的名称并在方法名称后面加上一个“\”和主键列的名称来确定默认的外键名称。
如果是一对一的关系-
eloquent通过检查relationship方法的名称并在方法名称后面加上\u id来确定默认的外键名称。
查看laravel文档了解更多详细信息

相关问题