В моем контроллере я получаю сложный запрос, который фильтрует данные в зависимости от ввода, предоставленного пользователем:
if (conditionB) {
$query = Model::with('relationA', 'relationB');
} else {
$query = Model::with('relationA', 'relationC');
}
// checking filters and apply conditions...
$query = $query->get();
Теперь в моем блейд-файле я зацикливаю результат и хочу отображатьзагрузить "отношение B или C:
@if (count($myObject->relationB)) {
<span>{{ $myObject->relationB->someField }}</span>
@else
<span>{{ $myObject->relationC->someField }}</span>
@endif
. Это работает, но если у моего $myObject
есть relationC
, а не relationB
, то во время проверки условия if загружается отношение.
Как я могу избежать загрузки этих отношений ??
, когда я делаю: {{ $myObject }}
Это дает мне:
// has relationB
"field1": value1,
"field2": value2,
....
"fieldx": valuex,
"relation_b":[
{
"relationBfield1": relationBvalue1,
"relationBfield2": relationBvalue2,
},
{ ... }
// doesn't have relationB
"field1": value1,
"field2": value2,
....
"fieldx": valuex
Я пытался получить доступ отношение_b (обратите внимание, что json меняет имя, заменяя UpperCase
на _<LowerCase>
), но возвращает NULL, но если я обращаюсь к Relationship B, он показывает данные:
myObject->relation_b; // NULL
myObject->relation_b[0]; // NULL
myObject->relationB; // works, but if item has RelationC it will "eager load" relationship B just to check that if condition
Я пробовал разные варианты, и я неПосмотрите, где я ошибаюсь, я также попытался создать public function
в моей модели:
{{ $myObject->checkRelation() }}
public function checkRelation()
{
if (count($this->relationB) > 0) {
// code...
Но я всегда сталкиваюсь с одной и той же проблемой, когда объектный объект не имеет отношения B, он загружает егочтобы проверить это, если условие.
Как я могу избежать этого?Или есть другой способ проверить, есть ли в объекте мой объект без выполнения дополнительного запроса?