Как получать один объект в разных запросах? Всем привет! Я совсем запутался в этом ООП.
Мне нужно создать список объектов например 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
219 +1
1
Ответы
1

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

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир