Nicki
Новичок
Как создавать объекты со связями не перегружая БД запросами?
Помогите советом, или опытом поделитесь уважаемые профессионалы) Вот стал писать ООП модель со сложными (ну не очень) связями, но возникли небольшие затруднения... Хочется узнать как кто подобные ситуации обходит.
Вот у меня есть такие объекты: страна, конструкторское бюро, самолет... ну для примера достаточно. Допустим мне нужно вывести список самолей. Посылаем запрос, dataMapper'у с массивом параметров для отбора записей из БД: $aircrafts = $aircraftMapper->getAircrafts($conditions);. Метод должен вернуть массив объектов самолетов. Но для создания объекта нужно создать объект КБ (конструкторское бюро) и в объекте КБ объект Страна. Получается что создавая объект Самолет, мы должны уже иметь готовый объект КБ, а в нем объект Страны. Но делая запрос мапперу КБ на получение объекта (и соответственно его создание), мы будем каждый раз обращаться к базе за данными единственного КБ, а тот в свою очередь при создании запросит у базы данные для создания объекта Страна. В результате мы делаем 1 запрос на выборку данных по самолетам (например 30 самолетов из разных стран и КБ), и допустим при этом еще запускается 10 запросов к базе за данными КБ и, еще 3 запроса за данными стран. База ведь так быстро ляжет. Да, пусть у нас емть хэш КБ и хэш Стран, поэтому если объект был уже создан ранее он возьмется готовый из хэша, но все равно это будет не 3 запроса (по одному на самолеты, КБ, строны), а поболее.
Как быть в этой ситуации?
Помогите советом, или опытом поделитесь уважаемые профессионалы) Вот стал писать ООП модель со сложными (ну не очень) связями, но возникли небольшие затруднения... Хочется узнать как кто подобные ситуации обходит.
Вот у меня есть такие объекты: страна, конструкторское бюро, самолет... ну для примера достаточно. Допустим мне нужно вывести список самолей. Посылаем запрос, dataMapper'у с массивом параметров для отбора записей из БД: $aircrafts = $aircraftMapper->getAircrafts($conditions);. Метод должен вернуть массив объектов самолетов. Но для создания объекта нужно создать объект КБ (конструкторское бюро) и в объекте КБ объект Страна. Получается что создавая объект Самолет, мы должны уже иметь готовый объект КБ, а в нем объект Страны. Но делая запрос мапперу КБ на получение объекта (и соответственно его создание), мы будем каждый раз обращаться к базе за данными единственного КБ, а тот в свою очередь при создании запросит у базы данные для создания объекта Страна. В результате мы делаем 1 запрос на выборку данных по самолетам (например 30 самолетов из разных стран и КБ), и допустим при этом еще запускается 10 запросов к базе за данными КБ и, еще 3 запроса за данными стран. База ведь так быстро ляжет. Да, пусть у нас емть хэш КБ и хэш Стран, поэтому если объект был уже создан ранее он возьмется готовый из хэша, но все равно это будет не 3 запроса (по одному на самолеты, КБ, строны), а поболее.
Как быть в этой ситуации?
