Как я могу скрыть отношение в модели Eloquent

#php #laravel-5 #eloquent #model

#php #laravel-5 #eloquent #Модель

Вопрос:

Я борюсь с красноречивой фиктивной проблемой. У меня есть пользователь модели, который имеет отношение многие ко многим с моделью, подобной.

Я получаю свою пользовательскую модель по ее идентификатору с помощью:

 $likedUser = User::findorfail($user_id);
  

В какой-то момент кода я делаю:

 if ($likedUser->likes->where(...)->count()) {
...
}
  

Затем я хочу вернуть свой $likedUser БЕЗ лайков (добавленных в условие IF выше Laravel). Как я могу это сделать? Если я это сделаю, это не сработает:

  return response()->json([
      'is_matched' => $isMatched,
      'liked_user' => $likedUser,
 ], 200);
  

Я хотел бы иметь $likedUser->without('likes') , чтобы удалить отношение, добавленное Laravel. Я пытался $outputUser = $likedUser->replicate() , но уникальное поле моих моделей исчезает..

1) Какой элегантный способ вернуть только мою пользовательскую модель без ее связи?

2) Почему Laravel добавляет отношение, даже если я никогда не устанавливаю свою переменную, а использую ее только в IF?

Большое спасибо за ваше время, ребята!

Комментарии:

1. Вы можете использовать if ($likedUser->likes()->where(...)->count()) { , чтобы предотвратить загрузку отношения. Вы можете скрыть загруженные отношения с помощью $hidden : laravel.com/docs /…

2. Спасибо! Я не знал, что () может все изменить, спасибо! 🙂

3. Я бы рекомендовал использовать полнофункциональную библиотеку сериализатора, поскольку вполне вероятно, что вскоре у вас возникнет больше проблем с этим подходом. Методы Laravel toArray() и toJson() недостаточно эффективны для более сложных вариантов использования — даже в сочетании с $hidden .