У меня есть таблица клиентов, подобная этой
id
name
Другая политика таблиц, подобная этой
id
policy_name
, и еще одна таблица policy_customer, подобная этой
id
customer_id
policy_id
In мою модель клиента я написал так:
protected $appends = ['policy_customer'];
public function policy_customer() {
return $this->hasOne('App\Models\PolicyCustomer', "customer_id", "id");
}
public function getPolicyCustomerAttribute(){
return $this->policy_customer()->firstOrFail();
}
и в модели PolicyCustomer
public function policy() {
return $this->belongsTo('App\Models\Policy', "policy_id", "id");
}
public function customer() {
return $this->belongsTo('App\Models\Customer', "customer_id", "id");
}
У всех клиентов может не быть политики, связанной с их учетной записью. Когда я запрашиваю Customer :: get (), это не проблема. Но если я пытаюсь вернуть это как ответ контроллера, я получаю ошибку, подобную приведенной ниже:
[2020-02-06 06:11:47] local.ERROR: Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\Models\PolicyCustomer]. in D:\Projects\others\jayhawker\backend\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php:454
Stack trace:
#0 D:\Projects\others\jayhawker\backend\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php(23): Illuminate\Database\Eloquent\Builder->firstOrFail()
#1 D:\Projects\others\jayhawker\backend\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Relations\Relation.php(385): Illuminate\Database\Eloquent\Relations\Relation->forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), 'firstOrFail', Array)
#2 D:\Projects\others\jayhawker\backend\app\Models\Customer.php(41): Illuminate\Database\Eloquent\Relations\Relation->__call('firstOrFail', Array)
#3 D:\Projects\others\jayhawker\backend\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(454): App\Models\Customer->getPolicyAttribute(NULL)
#
Если я удаляю функцию getPolicyCustomerAttribute из модели Customer, она не выдает исключение. Я что-то упустил?