В Laravel могу ли я отказаться от дополнений, которые $ appends применяет к модели для конкретных вызовов базы данных? - PullRequest
1 голос
/ 06 февраля 2020

Я унаследовал кодовую базу Laravel API, без личного предварительного Laravel воздействия.

Одна проблема, с которой я сталкиваюсь, это то, что контроллер возвращает больше, чем я явно просил.

Например, у пользователя есть все обычные вещи - имя, фамилия, электронная почта и т. Д. c ...

У пользователей также есть курсы, на которые они подписаны, и уроки, которые они закончили и т. Д. c.

В пользовательской модели $appends = [...] используется с некоторыми функциями setThisAttribute для загрузки модели данными из этих связанных моделей. Я могу понять, почему предыдущие разработчики делали это, потому что это очень удобно для некоторых вызовов API.

Пока я все это понимаю.

Хотя иногда я хочу сделать следующее: просто получите пользовательские данные, которые я явно запрашиваю.

В контроллере я мог бы написать что-то вроде (очень простой пример):

$users = User::select('users.id', 'users.first_name')->get();

Я хочу получить:

[
  {
    id: 1,
    first_name: "Jackson"
  },
  ...
]

Но вместо этого я сейчас получаю что-то вроде:

[
  {
    id: 1,
    first_name: "Jackson",
    courses: [...lots of data...],
    lessons:  [...even more data...]
  },
  ...
]

Разница в реальных ответах на вопрос составляет <100 мс, чтобы загрузить то, что я хочу клиенту, по сравнению с> 10 с с помощью $ добавления. Перегрузка модели.

Есть ли способ отказаться от добавления $ добавления для некоторых вызовов БД, или мне нужно переписать весь API, чтобы явно запросить, что нужно? в тех местах, где в настоящее время используется $ appends?

1 Ответ

0 голосов
/ 06 февраля 2020

Да.

По возвращении вы можете использовать:

$users = User::select('users.id', 'users.first_name')->get()->makeHidden(['courses', 'lessons']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...