У меня есть таблица клиентов, в которой есть поле с именем 'policy_id', где policy_id указывает на таблицу политик. Это нулевое поле, ie. Некоторые клиенты могут не иметь политики. У меня есть код отношения, подобный этому в Customer. php
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
Вот мой код поиска:
$c = new Customer();
return Customer::doesntHave('policy')->orWhere(function (Builder $query) use ($req) {
$query->orWhereHas('policy', function (Builder $query) use ($req) {
$p = new Policy();
$query->where($req->only($p->getFillable()))
->orWhereBetween("policy_period_from", [$req->policy_period_start_from, $req->policy_period_start_to])
->orWhereBetween("policy_period_to", [$req->policy_period_end_from, $req->policy_period_end_to])
->orWhereBetween("payment_date", [$req->payment_date_from, $req->payment_date_to]);
});
})->where($req->only($c->getFillable()))->get();
Я что-то упустил или Есть ли другие способы сделать это?
PS: во время отладки вышеуказанный код поиска возвращается успешно, но исключение происходит где-то внутри Laravel после вызова prepareResponse.
Заранее спасибо.