Как добавить тот же ключ массива с разными отношениями whenLoaded - PullRequest
1 голос
/ 22 мая 2019

Начиная с здесь , я хочу поместить данные из отношения к моим ресурсам API.

С одним ключом и одним отношением все работает.Но с двумя разными ключами и двумя одинаковыми отношениями этого не происходит.

Моя цель:

  • Если x отношенийзагружен, используйте эти данные в качестве ключа «а».
  • Если загружено отношение y, используйте эти данные в качестве ключа «a».

Что я пробовал

  1. Объект "Post" с одним ключом с именем "comments", когда отношение "comments" загружено.(работает)

  2. Объект "Post" с двумя ключами с именами "comments" и "comments".Первые «комментарии» создаются когда отношение «Loaded »« комментарии », а вторые« комментарии »создаются когда отношение «Loaded» comments_by_tag.

Затем я загружаю "Post" с отношением "comments" (не удалось).И загрузить отношения "comments_by_tag" (работает).

Объект "Post" с двумя ключами с именами "comments" и "comments".Теперь я изменяю позицию тех, у кого второй «комментарий» является первым, а первый «комментарий» является вторым.

Затем я загружаю «Пост» с отношением «комментарии» (работает).И загрузить отношения "comments_by_tag" (не удалось).

Это мой код на

return [
  'comments' => CommentItem::collection($this->whenLoaded('comments')),
  'comments' => CommentItem::collection($this->whenLoaded('comments_by_tag')),
];

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Не так элегантно, но делает то, что вам нужно. ->relationLoaded(relationName) проверяет, загружен ли он.

return [
    'comments' => $this->when(
        $this->relationLoaded('comments') 
        || $this->relationLoaded('comments_by_tag'),
        function () {
            return CommentItem::collection(
                $this->relationLoaded('comments')
                    ? $this->comments
                    : $this->comments_by_tag
            );
        }
    ), 
];
0 голосов
/ 22 мая 2019

Просто проверьте значение метода whenLoaded.

whenLoaded метод возвращает ноль, если нет загруженного отношения.

if ($comments = $this->whenLoaded('comments')) {
    return ['comments' => $comments]
} else if ($commentsByTag = $this->whenLoaded('comments_by_tag')) {
    return ['comments' => $commentsByTag];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...