2010-12-06 21 views
0

私はかなりOOPとZendの新人です。これまではdb接続を設定しようとしています。初心者:zendフレームワークでDB接続を正しく設定する方法は?

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アダプタにアクセスすることができます:私は私のapplication.iniファイルでこれを持って

$db = Zend_Db_Table::getDefaultAdapter(); 

問題ほとんどのガイドはそれを配置する場所が自動的に知っていると仮定しますが、私です正直に分かりません。私は毎回私の他のクエリを保持する複数のメソッドを作成したい場合、それは大丈夫だろう1つのクエリで

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

、しかし:私はこれまでやっていることは、私はメソッドを持っている私のindex.phpモデルであります私は$ db = Zend_Db_Table :: getDefaultAdapter()を呼び出さなければならないので、私は効率的な方法でこれをやっていないと確信しています。私はすでにさまざまな__construct()とinit()メソッドに配置しようとしましたが、うまくいかないでしょう。毎回呼び出さずにコードを追加する場所はどこですか?ありがとう。

答えて

3

クエリを実行する簡単な方法は、Zend_Db_Table_Abstractに拡張された各テーブルのクラスを作成することです。このクラスは、データベースからデータを取得するのに便利なメソッドを提供します。

この方法を使用している間、あなたはまた、新しいを作成するための

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

そしてを使用してIDを指定してフェッチすることができ、より具体的なポストのため

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

を通して、あなたのテーブルの内容を呼び出すことができますあなたは

$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

だから、新しいクラスが自動的にあなたのためのDB接続を行いインスタンス化? Zend_Db_Table_Abstractを拡張したクラスをどこで保存すればよいのでしょうか。 – Joker

+0

デフォルトのデータベースアダプタをブートストラップに設定している場合、使用する他のアダプタを指定しない限り、自動的に拡張するZend_Db_Table_Abstractはこのアダプタを使用します。 ZFはオートローダーを使用してクラスをロードするので、名前がファイルの位置を反映していることを確認するだけです:Model_Db_Tables_Posts()は、アプリケーションフォルダのmodels/db/tables/posts.phpフォルダにある必要がありますZendはモデルをパス内のモデルに自動的に変換します)。 –

+0

ありがとう、私は今働いているが、今は前と同じ状況に自分自身を見つける。私はクエリを実行するメソッドを呼び出すたびに、私は使用する必要があります:$ postsTable = new Model_Db_Tables_Posts()、またはこれは通常ですか?私は毎回それを繰り返すことは望まないと考えました。 – Joker

関連する問題