Задать вопрос

Получение объектов с сетерами и гетерами из mysql запроса в zend framework?

При выполнение Sql запроса в Zend_Db результат возвращается в виде массива ассоциативных массивов. Я хочу сделать чтобы результат возвращался в виде массива объектов с сетерами и гетерами(Как в магенто например, я знаю что там своя реализация коллекций, мне было бы достаточно простого массива объектов).



В голову приходит только следующее:

1)Создаём у объекта метод loadFromArray

2)Выполняем наш запрос

3)В цикле создаём объекты, грузим их из массива и добавляем их в новый массив.

4)Возвращаем полученный массив.



Но я не уверен что это правильно. Очень хотелось бы узнать как правильно.



Задам здесь ещё 1 вопрос, чтобы не плодить топики. Если мне нужно только 1 параметр объекта, то для того чтобы не грузить весь объект нужно создать хелпер или добавить метод возвращающий это значение без загрузки всего объекта?
  • Вопрос задан
  • 2708 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
В Zend_Db есть Zend_Db::FETCH_CLASS

Тоесть, можно как в pdo
$stmt->setFetchMode(Zend_Db::FETCH_CLASS|Zend_Db::FETCH_PROPS_LATE, 'ClassName');

И будут возвращаться объекты класса ClassName
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
taliban
@taliban
php программист
Я делал так:
1. создаем нужный обьект (будет коллекцией), наследуем от arrayIterator (в идеале я ручками все интерфейсы применял, так он более гибкий получается, но этот вариант проще), и переопределяем методы getItem и setItem (вроде, в мануале они есть)
2. вместо Вашего 3 пункта весь массив отдаем в нашу коллекцию
3. $collection[x] возвращает обьект

В итоге избавляемся от цикла, и получаем неплохую коллекцию. Я еще делал ее более универсальную, отдавал вместе с массивом название класса которое хочу получить в итоге.
Если не понятно спрашивайте =) обьясню поподробней с примерами.
Ответ написан
@SeriousDron
Я думаю вам нужно Zend_Db_Table, будете получать Zend_db_Table_Rowset (который SeekableIterator, Countable, ArrayAccess, так что почти массив) объектов Zend_Db_Table_Row.
Если нужны какие-то особенные объекты делаете своего наследника от Zend_Db_Table_Row. По умолчанию явных геттеров и сеттеров там не будет, но все будет работать через __get и __set, что в принципе тоже самое. Сделать явные вам тоже никто не мешает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы