在laravel中具有null-able的一个不工作

问题描述 投票:0回答:2

我有一个客户表,其中有一个名为'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

我是否缺少某些东西,或者还有其他方法可以做到这一点?

提前感谢。

mysql laravel eloquent one-to-one
2个回答
0
投票

返回$ this-> hasOne('App \ ModelName','foreign_key','local_key');

更改顺序,将外键policy_id放在id前面

public function policy() {
    return $this->hasOne('App\Models\Policy', "policy_id", "id");
}

0
投票

首先,您放置了错误的参数。

$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'
    ]);;
}

0
投票

那里存在许多问题,但是您也许可以指定两个模型的名称空间和类-客户和策略。默认情况下,使用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
}

祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.