Zend Framework — прямое использование SQL

#php #sql #zend-framework

#php #sql #zend-framework

Вопрос:

В настоящее время я начинаю проект с нуля, используя Zend Framework. У меня есть опыт работы с PHP и SQL, но я никогда раньше не использовал фреймворк PHP.

Что касается базы данных — во многих руководствах используются классы Zend для переноса SQL, чтобы вам не приходилось писать необработанный SQL. Например:

 $select = $this->select()
    ->from('MyTable')
    ->order('MyField');
  

Однако я предпочитаю писать SQL, поскольку это то, к чему я привык, и считаю, что с точки зрения гибкости и скорости разработки это лучшее решение. (Обратите внимание, что я на самом деле имею в виду параметризованный SQL с использованием PDO, а не полностью необработанный SQL).

Мои вопросы:

  1. Есть ли какие-либо проблемы с выполнением этого таким образом? Лучше ли мне в долгосрочной перспективе использовать Zend для выполнения запросов к базе данных? Часто ли разработчики Zend пишут SQL сами, а не используют запросы метода в стиле Zend?

  2. Каков наиболее распространенный способ реализации этого при сохранении макета кода MVC? Google дал мне эту ссылку (и подобные), но в контроллере есть SQL (который мне не нужен). Я все еще хочу создавать свои собственные классы моделей, специфичные для конкретного приложения, и придерживаться разделения MVC. Я могу придумать множество мест для создания экземпляра класса Zend_Db_Adapter_Pdo_Mysql для использования в моих моделях — однако я хотел бы знать, какой наиболее распространенный шаблон проектирования для этого.

Ответ №1:

Я считаю, что лучше всего было бы написать это в вашей модели:

 public function myQuery ($table, $id) {
    return $this
        ->getDefaultAdapter()
        ->query("SELECT * FROM ? WHERE id = ?",
            array($table,$id)
        )
        ->fetchAll()
    ;
}
  

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

Лучше ли вам использовать Zend или нет, зависит от вас и от того, насколько комфортно вы себя чувствуете с ними. Я предпочитаю функции, предоставляемые Zend для большей части работы, но на самом деле это просто вопрос личных предпочтений.

Обычно используются оба стиля, AFAIK, хотя я знаю не так уж много людей, использующих Zend (в основном из компании, в которой я работаю), так что не цитируйте меня ;).

Комментарии:

1. zend_db_select звездочки, когда вам нужно собрать запрос по частям и отправить его по кругу. Идеальным примером является paginator. Он получает sql-запрос и вызывает limit(1,10). В текстовом SQL вы тоже можете это сделать, но только потому, что вы можете его добавить. Допустим, вы хотите заменить столбцы на count( ) или что-то в этом роде. ->сброс(‘columns’)->столбцы(‘count( )’) 🙂

2. 1. Также я мог бы порекомендовать взглянуть на это . Это показывает, что иногда, с точки зрения производительности, лучше использовать SQL напрямую.

Ответ №2:

Попробуйте перейти по следующей ссылке:http://framework.zend.com/manual/en/zend.db.statement.html