2011-05-03 67 views
2

我目前正在從零開始使用Zend Framework開始一個項目。我在PHP和SQL方面經驗豐富,但我從未使用過PHP框架。Zend Framework - 直接使用SQL

關於數據庫方面的事情 - 很多教程使用Zend類來包裝SQL,以便您不必編寫原始SQL。例如:

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

然而,我的選擇是寫SQL,因爲這是我已經習慣了,覺得兩個靈活性和速度發展,這是最好的決定。 (請注意,我實際上是指使用PDO的參數化SQL,而不是完全原始的SQL)。

我的問題是:

  1. 是否有與做這種方式的任何問題?從長遠來看,使用Zend進行數據庫查詢的方式會更好嗎? Zend開發人員通常自己編寫SQL,而不是使用Zend風格的方法查詢?

  2. 在保持MVC代碼佈局的同時實現這個最常用的方法是什麼? Google給了我this link(以及類似的),但是在控制器中有SQL(我不想)。我仍然想創建自己的應用程序特定的模型類,並堅持MVC拆分。我可以想到很多地方來實例化Zend_Db_Adapter_Pdo_Mysql類,以便在我的模型中使用 - 但是我想知道最常見的設計模式是什麼。

回答

8

我相信你最好的選擇將是你的模型來寫:

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

這是完全可以做到這種方式。不應該有任何問題。事實上,當你需要使用子查詢或其他更復雜的東西時,你可以節省很多麻煩。您可以使用Zend的函數完成大部分工作,但讓我們誠實地說:當查詢變得更加複雜時,它們往往變得不可讀。

無論您是否喜歡Zend的方式,取決於您,以及您對他們的感覺如何。我更喜歡Zend爲大部分工作提供的功能,但這只是個人喜好的問題,真的。

雖然我不知道使用Zend的人太多(主要來自我工作的公司),但使用兩種樣式AFAIK是很常見的,所以請不要引用我;)。

+1

zend_db_select當您需要在部件中構建查詢並將其發送時zend_db_select星。理想的例子是paginator。它獲取sql查詢並調用limit(1,10)。在文本SQL中,你也可以這樣做,但只是因爲你可以附加它。假設你想用count(*)或類似的東西替換列。 - > reset('columns') - > columns('count(*)'):) – 2011-05-03 23:24:53

+1

+1。另外我可以推薦看看[this](http://www.dzone.com/links/r/a_day_in_the_life_of_a_slow_page_at_stack_overflow.html)。它表明有時候,就性能而言,最好直接使用SQL。 – Marcin 2011-05-04 07:25:08