Laravel - проверка лезвия, есть ли у объекта связь - PullRequest
0 голосов
/ 29 мая 2019

В моем контроллере я получаю сложный запрос, который фильтрует данные в зависимости от ввода, предоставленного пользователем:

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, он загружает егочтобы проверить это, если условие.

Как я могу избежать этого?Или есть другой способ проверить, есть ли в объекте мой объект без выполнения дополнительного запроса?

1 Ответ

1 голос
/ 29 мая 2019

Если вы хотите проверить, загружены ли отношения, вы можете использовать метод relationLoaded() для модели:

@if ($myObject->relationLoaded('relationB')) {
    <span>{{ $myObject->relationB->someField }}</span>
@else
    <span>{{ $myObject->relationC->someField }}</span>
@endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...