"未定义的偏移0"在穿越关系时

时间:2017-04-19 07:08:57

标签: laravel

我的系统中有两个型号,专利和专利申请人。 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专家,可能在某处做错了。

请帮忙!

3 个答案:

答案 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会更好。