2010-02-24 3 views
1

Ну, это скорее вопрос дизайна. Есть два способа я знаю, чтобы использовать включается в Zend FrameworkЛучший подход к объединению в Zend Framework?

  1. сделки с ним, используя экземпляр Zend таблицы (ее Выберите объект)
  2. сделки с ним, используя экземпляр Zend Db (его Select OBJ)

В первом подходе мне кажется очень странным - в какой-то таблице тоже нужно иметь дело с другими таблицами, что не очень хорошо, беспорядочно, по крайней мере, когда я читаю имя метода getData() - я предполагаю что он имеет дело с собственными данными.

Во-вторых, у вас может быть класс, который действует как служба - NodeService, и он будет обрабатывать узлы таблиц и node_translation, но также возникает вопрос, почему в этом случае нам нужна таблица Zend. Надеюсь, я мог бы объяснить себя достаточно хорошо спасибо.

ответ

1

Технически вы ссылаетесь на Zend_Db_Select и Zend_Db_Table_Select. Zend_Db и Zend_Db_Table не допускаются для соединения.

От ZF manual on the Select API in chapter Zend_Db_Table:

Объект Zend_Db_Table_Select является расширением объекта Zend_Db_Select, который применяется конкретные ограничения на запрос. Усовершенствования и ограничения:

  • Вы можете выбрать подмножество столбцов в запросе fetchRow или fetchAll. Это может обеспечить преимущества оптимизации, когда возвращение большого набора результатов для всех столбцов нежелательно.
  • Вы можете указать столбцы, которые оценивают выражения из выбранной таблицы. Однако это будет означать, что возвращаемая строка или набор строк будут прочитаны только и не могут использоваться для операций save(). Zend_Db_Table_Row с состоянием readOnly генерирует исключение, если выполняется операция save().
  • Вы можете разрешить предложения JOIN для выбора, чтобы разрешить поиск по нескольким таблицам.
  • Вы не можете указывать столбцы из JOINed, которые должны быть возвращены в строке/наборе строк. Это приведет к ошибке PHP. Это было сделано для обеспечения целостности Zend_Db_Table. то есть Zend_Db_Table_Row должен ссылаться только на столбцы, полученные из его родительской таблицы.

Основное различие в том, Zend_Db_Table и Zend_Db_Table_Select действуют как Table Data Gateway, который обеспечивает прямой доступ к таблице, и это строка и позволяет вызывать методы, чтобы Crud таблицы, тогда как Zend_Db_Select не и не зависит.

+0

Да, устная наметка понятна, Просто не хотелось вдаваться в детали, но все же главный вопрос касается подхода, где можно использовать соединение. – simple

+0

@simple Извините. Я думал, что это ясно из моего ответа. Используйте Zend_Db_Select, если вам не требуется дополнительное преимущество шлюза данных данных. – Gordon

+0

Лично я использую Zend_Db_Table_Select 90% времени (в основном все мои модели расширяют Zend_Db_Table_Abstract, кроме моделей, которые обрабатывают данные xml). Я привык к этому, хотя Zend_Db_Select, вероятно, отлично работает большую часть времени. –

Смежные вопросы