Как получать один объект в разных запросах? Всем привет! Я совсем запутался в этом ООП.
Мне нужно создать список объектов например user. Каждый объект будет содержать в себе поля (их много. Имя фамилия, адрес, фото, логин, количество постов, подписчиков и т.д.).
Получить такой список объектов из базы просто... Делаем запрос:SELECT * FROM `users`
Мы получим список объектов users. Вроде профит, НО...
Если в другом запросе нам нужно вывести пользователей "лайкнувших" пост. Опять выполняем запрос:SELECT u.*
FROM `likes` lk
INNER JOIN `users` u ON u.`id` = lk.`user_id`
WHERE lk.`post_id` = 1775
Мы опять получили список тех же объектов, но фактически после второго запроса мы будем создавать объекты уже заново в куске кода, который не подойдет для первого запроса. Получается, что и в том и другом случае мы можем создать разные объекты, если будем указывать разные поля в запросе. Красиво получилось бы так:
И в первом и во втором запросе получаем только поле ID пользователя, а потом передаем эти ID в метод getUsers, который выводит объекты users по единому правилу. А тот в свою очередь делает запрос в БД, в котором во WHERE IN() указывает полученные ID нужных пользователей. Но в этом случае получается два запроса, причем второй будет содержать кучу ID-шников в IN(). Что явно плохо...
Вот вопрос, как сделать так, чтобы можно было использовать единый метод для получения объектов user?
Или все-таки это правильно, создавать новый объект в каждом запросе, ведь в приложении встречаются не только запросы по лайкнувшим пост пользователям, но и подписчики, поиск по по пользователям, список недавно зарегистрированных пользователей и так далее... Выходит для каждого такого запроса нужно создавать свои объекты users.
Прошу прощение за такое изложение вопроса, надеюсь я нормально объяснил... может устал за целый день...

21 Авг 2019 в 07:01
199 +1
1
Ответы
1

Для решения данной проблемы, можно использовать шаблон проектирования Data Mapper. Data Mapper разделяет объекты предметной области и базы данных, позволяя работать с объектами независимо от структуры базы данных.
Вы можете создать класс, который будет отвечать за загрузку и сохранение объектов пользователей из базы данных. В этом классе вы будете иметь методы для загрузки пользователей по различным критериям (все пользователи, пользователи по ID, пользователи по параметрам и т.д.).
Таким образом, вы сможете использовать этот класс в разных запросах для получения объектов пользователей, не создавая их заново в каждом запросе. Ваши объекты пользователей будут одними и теми же, и вы сможете работать с ними в едином формате.
Такой подход позволит вам уменьшить дублирование кода и облегчить поддержку и развитие вашего приложения.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 888 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир