Есть три класса:
- Customer Пользователь
- Order Заказы
- Product Товар
На сайте нужно вывести таблицу, в которой будут выводиться данные о Заказе, контакты Пользователя и название Товара. Сама таблица заказов содержит только id_user, id_product (внутри БД, внешними ключами всё связано)
Получается, мне нужно вывеси список всех заказов в массив
По id_user вывести список всех клиентов
По id_product вывести список всех товаров
Соединить полученное в php и выводить как угодно?
3 таблицы объединяются через join по соответствующим ключам, полученный набор уже распихать по объектам. Иначе получится слишком большой объем выборки и непонятный ордер, все же бд для этого больше подходит чем сортировка на пхп.
Тут дело в другом. Используя ООП я как-то хотел изолировать сущности. То есть каждый класс управляет своими данными. А тут получается, уже на уровне запроса я их соединяю. Конечно, так в 10 раз удобней :) но тогда будут зависимости жесткие. Разве принцип ооп не для этого придумали? а если завтра я придумаю новую модель и захочу соединить.
Макс Васильев, ну, скажем так: есть вариант ложащийся в классические запросы на получение коллекций объектов, которые полностью ложатся в концепции ООП, но тут уже зависит от ситуации. Проекты хайлоад чаще используют подход когда жесткий хардкорный код ускоряет работу в разы. Обычно как раз на таких перекрестных выборках. Однако ничего не мешает вам выбирать классическим способом, коллекции по типам объектов, затем в коде циклом строить массив соответствий.
1. Есть бизнес логика, а она говорит что заказ не может существовать без продукта, и без клиента, а это жёсткая связь.
2. Есть подход к разработке DDD а он позволяет писать приложения не имея базы данных, опираясь на бизнес логику, поэтому если вы выдумали данные правила существования объектов, лучше не усложнять, делать как диктует бизнес
Создавайте абстрацкии. Пусть каждая сущность работает отдельно, но , например, класс EntityManager умеет загружать зависимости.
EntityManager->load(product, user, order)->all();
Действующий код не подскажу, сначала продумать действия надо. Но вот можно посмотреть как сделано в laravel https://stackoverflow.com/questions/26005994/larav...