2010-12-06 52 views
0

我是OOP和Zend的新手。到目前爲止,我正在嘗試建立一個數據庫連接。我有這個在我的application.ini文件:新手:如何在zend框架上正確設置數據庫連接?

resources.db.adapter = "PDO_MYSQL" 
resources.db.params.host = "localhost" 
resources.db.params.username = "root" 
resources.db.params.password = "" 
resources.db.params.dbname = "dbtest" 
resources.db.isDefaultTableAdapter = true 

按說我可以隨處訪問數據庫適配器:

$db = Zend_Db_Table::getDefaultAdapter(); 

問題是最指南假設你自動知道在什麼地方,但我老實說不知道。我在做什麼,到目前爲止,在我的index.php模型我有一個方法:

public function getPosts() 
{ 
$db = Zend_Db_Table::getDefaultAdapter(); 
$sql = "SELECT * FROM posts"; 
$result = $db->fetchAll($sql); 
return $result; 
} 

有了一個查詢它會好起來的,但如果我想創建每次握住我的其他查詢的詳細方法我將不得不調用$ db = Zend_Db_Table :: getDefaultAdapter(),所以我確信我沒有以有效的方式來完成這個任務。我已經嘗試將它放置在各種__construct()和init()方法中,但它不起作用。我在哪裏添加代碼而不必每次都調用它?謝謝。

回答

3

一個簡單的方法來運行您的查詢將創建一個類爲您的每個表擴展Zend_Db_Table_Abstract這將爲您提供一些方便的方法來幫助你從你的數據庫中獲取你的東西。

在使用這種方法,你就可以通過

$postsTable = new Model_Db_Tables_Posts() // Assuming you put your class post in the folders models/db/tables/ 
$posts = $postsTable->fetchAll(); 

打電話給你的表格內容更具體的職位,你也可以通過ID使用

$singlePost = $postsTable->find(1); // Assuming the id of the post you want is 1 

獲取它,然後創建新你可以去的條目

$data = array('title' => 'Some title', 'content' => 'Some Content') // where the key is the table field and the value is the value you want to insert 
$newId = $postsTable->insert($data); 

並用於更新

$data = array('title' => 'Some title', 'content' => 'Some Content') 
$db = $postsTable->getAdapter(); 
$where = $db->quoteInto('id = ?', $id); // quoteInto is used to escape unwanted chars in your query, not really usefull for integers, but still a good habit to have 
$postsTable->update($data, $where); 

希望這有助於你一點,你可以在http://framework.zend.com/manual/fr/zend.db.table.html發現在官方ZF文檔的詳細信息和http://framework.zend.com/manual/fr/zend.db.table.row.html

+0

於是實例化新類自動爲你一個數據庫連接?我在哪裏可以保存我的類來擴展Zend_Db_Table_Abstract,對不起,在這一點上再次抱歉。 – Joker 2010-12-06 16:58:23