1

我在一个使用自定义 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';

}

$title = Title::all();在 Tinker 中运行时,我可以正确检索此模型的内容。

我在 Employee.php 中建立了一个新的关系:

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

但是,当我运行时,在 Tinker(我已重新启动)中:

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

它返回:

Illuminate\Database\Eloquent\Collection {#3027 all: [], }

我做了什么来错误地建立这种关系?

4

2 回答 2

0

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

但是,根据文档,它显示:

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

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

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

public function title()
{
    return $this->hasOne('App\Title', 'TitleID', 'TitleID');
}
于 2020-05-22T12:42:05.130 回答
0

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

$employee = Employee::first();
$employee->title;
于 2020-05-22T12:42:14.683 回答