Laravel Eloquent 一对一关系返回空集合
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;
哪个returns:
"6"
我现在制作了一个模型:Title.php:
class Title extends Model
{
protected $table = "dbo.title";
protected $primaryKey = 'TitleID';
}
在 Tinker 中 运行ning $title = Title::all();
时,我可以正确检索此模型的内容。
我在Employee.php建立了新的关系:
public function title()
{
return $this->hasOne('App\Title', 'TitleID');
}
然而,当我 运行:
$employee = Employee::first();
$employee->title()->get();
它returns:
Illuminate\Database\Eloquent\Collection {#3027
all: [],
}
我做错了什么来设置这个关系?
问题是因为另一个 table 的主键不是 id
,所以无法找到该集合。
但是,根据文档,它是这样写的:
Additionally, Eloquent assumes that the foreign key should have a value matching the id (or the custom $primaryKey) column of the parent.
所以我假设因为我设置了一个自定义 $primaryKey
值,所以它会直观地找到它 - 但似乎问题与本地键的名称中断有关 Eloquent'约定。
我通过分别声明外键和本地键解决了这个问题:
public function title()
{
return $this->hasOne('App\Title', 'TitleID', 'TitleID');
}
您只需要访问 属性 title
而不是调用 title()
:
$employee = Employee::first();
$employee->title;
我在一个项目中使用自定义 PK 和 FK,我正在尝试建立一对一关系。
例如,在Employee.php中:
public function title()
{
return $this->hasOne('App\Title', 'TitleID');
}
在 Tinker 上,我可以像这样检索员工 TitleID:
$employee = Employee::first();
$employee->TitleID;
哪个returns:
"6"
我现在制作了一个模型:Title.php:
class Title extends Model
{
protected $table = "dbo.title";
protected $primaryKey = 'TitleID';
}
在 Tinker 中 运行ning $title = Title::all();
时,我可以正确检索此模型的内容。
我在Employee.php建立了新的关系:
public function title()
{
return $this->hasOne('App\Title', 'TitleID');
}
然而,当我 运行:
$employee = Employee::first();
$employee->title()->get();
它returns:
Illuminate\Database\Eloquent\Collection {#3027 all: [], }
我做错了什么来设置这个关系?
问题是因为另一个 table 的主键不是 id
,所以无法找到该集合。
但是,根据文档,它是这样写的:
Additionally, Eloquent assumes that the foreign key should have a value matching the id (or the custom $primaryKey) column of the parent.
所以我假设因为我设置了一个自定义 $primaryKey
值,所以它会直观地找到它 - 但似乎问题与本地键的名称中断有关 Eloquent'约定。
我通过分别声明外键和本地键解决了这个问题:
public function title()
{
return $this->hasOne('App\Title', 'TitleID', 'TitleID');
}
您只需要访问 属性 title
而不是调用 title()
:
$employee = Employee::first();
$employee->title;