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

我在一个项目中使用自定义 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 全部: [], }


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


LEATH
浏览 94回答 2
2回答

POPMUISE

问题是因为另一个表的主键不是id,所以无法找到该集合。但是,根据文档,它是这样写的:此外,Eloquent 假定外键的值应与父项的 id(或自定义 $primaryKey)列相匹配。所以我假设因为我设置了一个自定义$primaryKey值,它会凭直觉找到它——但问题似乎与打破 Eloquent 约定的本地键的名称有关。我通过分别声明外键和本地键解决了这个问题:public function title(){     return $this->hasOne('App\Title', 'TitleID', 'TitleID'); }

慕莱坞森

您只需要访问属性title而不是调用title():$employee = Employee::first(); $employee->title;
打开App,查看更多内容
随时随地看视频慕课网APP