#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
.