как бы изловчиться при выводе нескольких однотипных элементов
в моем случае это товары, хотя могут быть и анонсы, и еще кака я нить упрощенная тому подобная однотипная структура
1) нынче это работает так: выгрибаем из базы все необходимые поля в ассоциативный массив, после чего это перенаправляется в "шаблонизатор"
минусы:
1 относительно много памяти,
2 неудобство рабоыт с ассоциативным массивом,
3 получение списка происходит из разных мест, в итоге если нужно расширить количество параметров, приходится повторять эти действия
плюсы (если их так можно назвать):
1 базу дергаем не часто
2) хотелось бы: получасть список индексов для объектов-моделей, передаваемый в шаблонизатор или итерационный объект который будет возвращать объекты модели,
а там уже по полученным ID получить объекты (товаров/статей/отзывов/коментов/...) подставлять их в шаблон
тут уже от реализации объектов, если получение значений делается в виде дерганья каждый раз базы, то база будет дергаться ну очень часто, а в манах к мускулю написано что запросы в цыкле это зло
3) иной вариант реализации это если для объекта а точнее вывода будут выдергиваться все необходимые элементы из базы за один присест
минусы почти теже что и в предыдущем варианте, хотя база дергается чуть реже. но по прежлему в цикле
4) следующий вариант, получить индексы для базы, и уже на основе них делать запрос к базе, и итеративно полученные значения впихивать в шаблон или генерить объект, а потом объект в шаблон
минусы с объектом в том, что это не модель, а некий вывод, который работает в обход модели
в общем вот такая каша в голове, может есть светлые идеи по реализации?
1. DlTA - 18 Апреля, 2014 - 10:41:32 - перейти к сообщению
2. DlTA - 18 Апреля, 2014 - 14:48:07 - перейти к сообщению
ребята ну хоть какую то мыслю толкните, есть чет не понятно описал, укажите, приложу примеры кода
а то и обсудить нескем(
а то и обсудить нескем(
3. Edwvee - 18 Апреля, 2014 - 15:34:20 - перейти к сообщению
Первый способ видится самым нормальным:
1. Неужели на странице так много товаров, что есть смысл экономить память?
2. Работай с обычным массивом, необязательно же получать из бд именно ассоциативный массив. Сэкономишь память значительно.
3. Ничего непонятно. Конкретнее объяснить не можешь?
В остальных вариантах по описанию не очень понятно. Но из базы лучше за один запрос все получить, так что они отметаются.
(Добавление)
Это очень значительный плюс.
1. Неужели на странице так много товаров, что есть смысл экономить память?
2. Работай с обычным массивом, необязательно же получать из бд именно ассоциативный массив. Сэкономишь память значительно.
3. Ничего непонятно. Конкретнее объяснить не можешь?
В остальных вариантах по описанию не очень понятно. Но из базы лучше за один запрос все получить, так что они отметаются.
(Добавление)
Цитата:
плюсы (если их так можно назвать):
1 базу дергаем не часто
1 базу дергаем не часто
Это очень значительный плюс.
4. DlTA - 18 Апреля, 2014 - 16:02:54 - перейти к сообщению
примеры для 1 просты
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- /** @return mixed[] */
- $arListGoods = CDB::rows('SELECT ........ WHERE ...');
- foreach($arListGoods as $itemGoods){
- echo "<b>{$itemGoods['name']}</b><br>";
- }
для 2
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- /** @return int[] */
- $listGoodsId = CDB::cols('SELECT `id` WHERE ...');
- foreach($listGoodsId as $goodsId){
- $oGoods = new CGoods($goodsId);
- echo "<b>{$oGoods->getName()}</b><br>";
- }
для 3
такой же как и 2, но разница в том что все поля для объекта выдергиваются из базы пни создании объекта, а не по запросу метода
для 4
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- /** @return CDBLink */
- foreach($oDBLink as $itemGoods){
- echo "<b>{$itemGoods['name']}</b><br>";
- }