为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel Eloquent 一对一关系返回空集合

Laravel Eloquent 一对一关系返回空集合

PHP
LEATH 2023-04-15 10:40:01
我在一个项目中使用自定义 PK 和 FK,我正在尝试建立一对一关系。例如,在 Employee.php 中:public function title(){    return $this->hasOne('App\Title', 'TitleID');}在 Tinker 上,我可以像这样检索员工 TitleID:$employee = Employee::first();$employee->TitleID;哪个返回:“6”我现在做了一个模型:Title.php:class Title extends Model{    protected $table = "dbo.title";    protected $primaryKey = 'TitleID';}在 Tinker 中运行时,我可以正确检索该模型的内容$title = Title::all();。我在 Employee.php 中建立了一个新的关系:public function title(){    return $this->hasOne('App\Title', 'TitleID');}但是,在 Tinker(我已经重新启动)中运行时:$employee = Employee::first();$employee->title()->get();它返回:Illuminate\Database\Eloquent\Collection {#3027 全部: [], }我做了什么错误地建立了这种关系?
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

问题是因为另一个表的主键不是id,所以无法找到该集合。

但是,根据文档,它是这样写的:

此外,Eloquent 假定外键的值应与父项的 id(或自定义 $primaryKey)列相匹配。

所以我假设因为我设置了一个自定义$primaryKey值,它会凭直觉找到它——但问题似乎与打破 Eloquent 约定的本地键的名称有关。

我通过分别声明外键和本地键解决了这个问题:

public function title(){ 
   return $this->hasOne('App\Title', 'TitleID', 'TitleID');
}


查看完整回答
反对 回复 2023-04-15
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您只需要访问属性title而不是调用title()

$employee = Employee::first();
$employee->title;


查看完整回答
反对 回复 2023-04-15
  • 2 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信