我有一个客户表,其中有一个名为'policy_id'的字段,其中policy_id指向策略表。这是一个可为空的字段,即。一些客户可能没有政策。我有这样的关系代码
public function policy() {
return $this->hasOne('App\Models\Policy', "id", "policy_id");
}
但是当我发出搜索请求时,我得到这样的错误:
Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\Models\Policy]
如果我这样修改功能:
public function policy() {
if ($this->getAttribute('policy_id')) {
return $this->hasOne('App\Models\Policy', "id", "policy_id");
} else {
return null
}
}
但是我遇到这样的错误:
Call to a member function getRelationExistenceQuery() on null
我是否缺少某些东西,或者还有其他方法可以做到这一点?
提前感谢。
返回$ this-> hasOne('App \ ModelName','foreign_key','local_key');
更改顺序,将外键policy_id
放在id
前面
public function policy() {
return $this->hasOne('App\Models\Policy', "policy_id", "id");
}
首先,您放置了错误的参数。
$this->hasOne('App\Models\Policy', "FK", "PK");
public function policy() {
return $this->hasOne('App\Models\Policy','policy_id', 'id');
}
对于policy_id的null
值,您可以使用withDefault();
public function policy() {
return $this->hasOne('App\Models\Policy','policy_id', 'id')->withDefault([
'name' => 'test'
]);;
}
那里存在许多问题,但是您也许可以指定两个模型的名称空间和类-客户和策略。默认情况下,使用php artisan make:model
创建的模型将使用\ App命名空间,例如\ App \ Customer和\ App \ Policy。只是仔细检查一下。另外,关于关系,如果遵循Laravel约定,则可以:
写
public function policy() {
return $this->hasOne(Policy::class);
}
或
public function policy() {
return $this->hasOne(\App\Policy::class);
// or \App\Model\Policy depending on your namespace
}
祝你好运