Как получать один объект в разных запросах? Всем привет! Я совсем запутался в этом ООП. Мне нужно создать список объектов например 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. Прошу прощение за такое изложение вопроса, надеюсь я нормально объяснил... может устал за целый день...
Для решения данной проблемы, можно использовать шаблон проектирования Data Mapper. Data Mapper разделяет объекты предметной области и базы данных, позволяя работать с объектами независимо от структуры базы данных. Вы можете создать класс, который будет отвечать за загрузку и сохранение объектов пользователей из базы данных. В этом классе вы будете иметь методы для загрузки пользователей по различным критериям (все пользователи, пользователи по ID, пользователи по параметрам и т.д.). Таким образом, вы сможете использовать этот класс в разных запросах для получения объектов пользователей, не создавая их заново в каждом запросе. Ваши объекты пользователей будут одними и теми же, и вы сможете работать с ними в едином формате. Такой подход позволит вам уменьшить дублирование кода и облегчить поддержку и развитие вашего приложения.
Для решения данной проблемы, можно использовать шаблон проектирования Data Mapper. Data Mapper разделяет объекты предметной области и базы данных, позволяя работать с объектами независимо от структуры базы данных.
Вы можете создать класс, который будет отвечать за загрузку и сохранение объектов пользователей из базы данных. В этом классе вы будете иметь методы для загрузки пользователей по различным критериям (все пользователи, пользователи по ID, пользователи по параметрам и т.д.).
Таким образом, вы сможете использовать этот класс в разных запросах для получения объектов пользователей, не создавая их заново в каждом запросе. Ваши объекты пользователей будут одними и теми же, и вы сможете работать с ними в едином формате.
Такой подход позволит вам уменьшить дублирование кода и облегчить поддержку и развитие вашего приложения.