2010-08-26 3 views
4

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

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

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

Я знаю, что можно было бы получить доступ к двум различным моделям от контроллера, а затем объединить их соответствующие данные в действии, но я бы не чувствовал себя счастливым, делая это, так как я читал survivethedeepend.com и it tells me that I shouldn't do this ...

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

Спасибо!

ответ

5

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

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

1

Остановите думать о Zend_Db_Table как о своей «модели».

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

+0

Вы предполагаете, что модель будет получить доступ к дополнительным классам, которые распространяются от Zend_Db_Table_Abstract? – olive

+0

@Ihnz no, он предполагает, что модель является вашим приложением, в то время как ваши контроллеры и представления - это просто интерфейс. – Gordon

+1

@ lhnz - на самом деле, да, но все остальное, что сказал Гордон, тоже верно. У вас могут быть некоторые классы persistence/data-mapper, которые используются в ваших более классных классах, ориентированных на домен, но ваша модель должна быть * больше *, чем просто абстракция базы данных. Если вы обнаружите, что используете классы, которые расширяют Zend_Db_anything непосредственно в ваших контроллерах, это большой красный флаг, который вам нужен для создания более богатой модели. – timdev

1

Конечно, вы можете запросить несколько таблиц db одновременно. Посмотрите на официальных документах 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