gpt4 book ai didi

php - Laravel/Eloquent 关系不一致

转载 作者:行者123 更新时间:2023-12-01 00:35:37 25 4
gpt4 key购买 nike

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

  • 每个应用程序有 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():

enter image description here

我是否遗漏了一些明显的东西?为什么它会检索一个而不检索另一个?

编辑:小狗表 enter image description here

最佳答案

你的关系错了-

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。

Review Laravel doc for more details

关于php - Laravel/Eloquent 关系不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51621552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com