Получение данных из нескольких таблиц при использовании Zend Framework? - PullRequest
4 голосов
/ 26 августа 2010

Есть ли лучшая практика получения данных из нескольких таблиц базы данных с помощью Zend?Я хотел бы знать, а не в конечном итоге желание реорганизовать код, который я пишу в ближайшем будущем.Я читал документацию Zend и там говорилось, что:

"Вы не можете указать столбцы из таблицы JOINed, которые будут возвращены в строке / наборе строк. Это вызовет ошибку PHP. Это было сделаночтобы сохранить целостность Zend_Db_Table. То есть Zend_Db_Table_Row должен ссылаться только на столбцы, полученные из его родительской таблицы. "

Полагаю, мне нужно использовать несколько моделей - это правильно?Если, например, я хочу получить все заказы для определенного идентификатора пользователя, где дата находится между двумя датами, что я буду делать?

Я знаю, что было бы возможно получить доступ к двум различным моделям изконтроллер, а затем объединить их соответствующие данные в действии, но я не чувствую себя счастливым, делая это, так как я читал текст livewedeepend.com и он говорит мне, что я не должен делать это ...

Где, почему и как?:)

Спасибо!

Ответы [ 3 ]

5 голосов
/ 26 августа 2010

Если вы читаете ZFSTDE, в главе 9 (http://www.survivethedeepend.com/zendframeworkbook/en/1.0/implementing.the.domain.model.entries.and.authors) эта проблема решается с помощью преобразователя данных.

Кроме того, вы можете объединить 2 таблицы, просто сначала вызовите для объекта select метод setIntegrityCheck(false). Документы говорят, что строка должна ссылаться на родительскую таблицу, но это не значит, что она не может:)

1 голос
/ 26 августа 2010

Конечно, вы можете запросить несколько таблиц БД одновременно. Посмотрите официальные документы ZF здесь http://framework.zend.com/manual/en/zend.db.select.html#zend.db.select.building.join

Что касается вашего примера с получением всех заказов от одного пользователя, то табличные отношения - это ответ http://framework.zend.com/manual/en/zend.db.table.relationships.html

1 голос
/ 26 августа 2010

Хватит думать о Zend_Db_Table как о вашей "модели".

Вы должны написать свои собственные, богатые, доменно-ориентированные классы моделей, чтобы они находились между вашими контроллерами (и представлениями) и вашей логикой постоянства (все, что использует Zend_Db / Zend_Db_Table / Zend_Db_Select) для загрузки / сохранения данных из базы данных.

...