[英]Laravel Eloquent one-to-one relationship returning empty collection
我在一个使用自定义 PK 和 FK 的项目中,我正在尝试建立一对一的关系。
例如,在 Employee.php 中:
public function title()
{
return $this->hasOne('App\Title', 'TitleID');
}
在 Tinker 上,我可以像这样检索员工 TitleID:
$employee = Employee::first();
$employee->TitleID;
返回:
“6”
我现在做了一个 model: Title.php:
class Title extends Model
{
protected $table = "dbo.title";
protected $primaryKey = 'TitleID';
}
运行$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 all: [], }
我做了什么来错误地建立这种关系?
问题是因为另一个表的主键不是id
,所以它无法找到集合。
但是,根据文档,它显示:
此外,Eloquent 假定外键的值应与父级的 id(或自定义 $primaryKey)列匹配。
所以我假设因为我设置了一个自定义的$primaryKey
值,所以它可以直观地找到它 - 但是似乎问题与本地键的名称打破了 Eloquent 的约定有关。
我通过分别声明外键和本地键解决了这个问题:
public function title()
{
return $this->hasOne('App\Title', 'TitleID', 'TitleID');
}
您只需要访问属性title
而不是调用title()
:
$employee = Employee::first();
$employee->title;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.