我的系统中有两个型号,专利和专利申请人。 PatentApplicant迁移定义了外键:
$table->integer('patent_id')->unsigned();
$table->foreign('patent_id')->references('id')->on('patents');
在我的专利模型中,关系定义如下:
public function applicant() {
return $this->belongsTo('App\Models\Patents\PatentApplicant')->get()[0];
}
关键是申请人也可以为空。因此,当我尝试使用$patent->applicant()
访问申请人时,我现在已经收到此错误:
PHP error: Undefined offset: 0 in /path/to/some/cache/compiled.php
我知道产生错误的行是因为我处于tinker
模式且发布了$patent->applicant()
。我不是Laravel专家,可能在某处做错了。
请帮忙!
答案 0 :(得分:3)
在一对一关系中,必须在拥有的表(PatentApplicant表)中引用所有者表(在您的情况下为专利)中的外键。因此,您的专利模型应该具有如下关系:
public function applicant() {
return $this->hasOne('App\Models\Patents\PatentApplicant');
}
假设命名空间App\Models\Patents\
是真正定制的而不是错误编写的。
并且不需要[0]
或first()
甚至get()
。我已经this part of the doc.s
答案 1 :(得分:0)
您可以使用->first()
,也可以在拍摄第一个异地之前检查get
是否有结果
答案 2 :(得分:0)
您必须删除get()末尾的[0]。如果你想要单个记录数组,那么用户first()而不是get会更好。