この記事の例では、Zend_Db_Table の使用法について説明します。以下のように、皆さんと共有してください:
1. はじめに
Zend_Db_Table は Zend Framework のテーブル モジュールで、zend_db_adapter を通じてデータベースに接続し、データベース スキーマのテーブル オブジェクトをチェックし、テーブルを操作してクエリします。
2. まず、抽象クラス zend_db_table のデフォルトのデータベース アダプターを設定する必要があります (注意: このクラスは抽象クラスであるため、直接インスタンス化できません。最初にこのクラスを継承することしかできません。他のタイプのデータベース アダプターを指定しない限り、すべての zend_db_table クラス インスタンスはデフォルトのアダプターを使用します
<?php // 建立一个 adapter require_once 'Zend/Db.php'; $params = array ( 'host' => '127.0.0.1', 'username' => 'malory', 'password' => '******', 'dbname' => 'camelot' ); $db = Zend_Db::factory('PDO_MYSQL', $params); // 为所有的Zend_Db_Table对象设定默认的adapter require_once 'Zend/Db/Table.php'; Zend_Db_Table::setDefaultAdapter($db); ?>
次に、データベースに zend_db_table という名前のテーブルがあると仮定します。このテーブルは、zend_db_table クラスを継承するだけです。 RoundTable という名前の新しいクラスを作成します。その後、このクラスを使用して、データベース内の Round_table テーブルのデータ結果を確認、取得できます。
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); ?>
3.
デフォルトでは、zend_db_table クラスはそのクラス名をデータベース内のテーブル名として扱います (大文字と小文字が異なる場合は "_" を追加する必要があります)。たとえば、SomeTableName という名前の zend_db_table クラスは、次のテーブル "some_table_name" に対応します。クラス名をデータベースと比較したくない場合、テーブル名はこの下線付きの形式に対応しており、$_name はクラスを定義するときに再構築できます。<?php class ClassName extends Zend_Db_Table { // 默认表名为 'class_name' // 但是我们也可以对应其它表 protected $_name = 'another_table_name'; } ?>zend_db_table クラスのデフォルトのフィールド "id" は次のとおりです。テーブルの主キー (このフィールドは自動インクリメントされることが望ましいですが、必須ではありません)。テーブルの主キーの名前が "$id" でない場合は、テーブル エンティティ クラスを定義するときに $_primary を再構築できます
<?php class ClassName extends Zend_Db_Table { // 默认主键为'id' // 但我们也可以设定其他列名为主键 protected $_primary = 'another_column_name'; } ?>テーブル エンティティ クラスで _setup() メソッドを使用することもできます。これらの変数を設定します。ただし、変更後は必ずparent::_setup() メソッドを再度実行してください。
<?php class ClassName extends Zend_Db_Table { protected function _setup() { $this->_name = 'another_table_name'; $this->_primary = 'another_column_name'; parent::_setup(); } } ?>4. 新しい行を挿入するにはテーブル内のデータの場合は、列名を変更するだけです: データの連想配列をパラメータとして、insert() メソッドを呼び出すだけです(zend フレームワーク) は自動的にデータを引用し、挿入された最後の行の ID 値を返します
。 (注: これは、挿入された行の数を返す zend_db_adapter::insert メソッドとは異なります。)
<?php // // INSERT INTO round_table // (noble_title, first_name, favorite_color) // VALUES ("King", "Arthur", "blue") // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $data = array( 'noble_title' => 'King', 'first_name' => 'Arthur', 'favorite_color' => 'blue', ) $id = $table->insert($data); ?>
5. データを更新する
テーブル内のデータの行を変更するには、列名を設定します。データの連想配列をパラメータとして受け取り、update() メソッドを呼び出します。このメソッドは、同じ where 条件節を通じて変更する必要がある行を決定し、テーブル内のデータを変更し、変更された行の数を返します。 (Zend フレームワード) は変更されたデータを自動的に引用しますが、このチェックには条件句が含まれていないため、
class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $set = array( 'favorite_color' => 'yellow', ) $where = $db->quoteInto('first_name = ?', 'Robin'); $rows_affected = $table->update($set, $where);6 のデータを削除するにはテーブルの zend_db_adapter オブジェクトを使用する必要があります。テーブルに対して delete() メソッドを呼び出し、where 条件句文を渡すと、削除する必要がある行の数が返されます。(zend フレームワーク) は条件句を引用しません。したがって、作業を完了するにはテーブルの zend_db_adapter オブジェクトを使用する必要があります
<?php // // DELETE FROM round_table // WHERE first_name = "Patsy" // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('first_name = ?', 'Patsy'); $rows_affected = $table->delete($where); ?>7. 主キーに基づいてデータを検索します find() メソッドを呼び出すことで、主キーの値を使用してテーブル内のデータを簡単に取得できます。特定のデータのみをクエリしたい場合、このメソッドは zend_db_table_row オブジェクトを返します。複数のレコードをクエリしたい場合は、zend_db_table_rowset オブジェクトが返されます。
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); // SELECT * FROM round_table WHERE id = "1" $row = $table->find(1); // SELECT * FROM round_table WHERE id IN("1", "2", 3") $rowset = $table->find(array(1, 2, 3)); ?>
(zend フレームワーク) は引用符を追加しないことに注意してください。 where ステートメントを使用するため、zend_db_adapter
<?php // // SELECT * FROM round_table // WHERE noble_title = "Sir" // AND first_name = "Robin" // ORDER BY favorite_color // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('noble_title = ?', 'Sir') . $db->quoteInto('AND first_name = ?', 'Robin'); $order = 'favorite_color'; $row = $table->fetchRow($where, $order); ?>
9 を介してデータ処理を実行する必要があります。 複数のレコードを取得する
一度に複数のレコードを取得する必要がある場合は、 fetchRow() を使用するのと同様に、 fetchAll() メソッドを使用できます。このメソッドでは、where 句と order 句を設定できるだけでなく、返される結果の数を制限するために、選択した結果を Zend_Db_Table_Rowset オブジェクトとして返すこともできます。 (zend フレームワーク) は where ステートメントを引用しないため、zend_db_adapter を通じてデータ処理を実行する必要があります。 10. ドメイン ロジックの追加
Zend Framework のテーブル モジュールとして、Zend_Db_Table はそれ自体を独自のドメイン ロジックにうまくカプセル化します。 、insert() メソッドと update() メソッドをオーバーロードして、変更の送信前のデータ処理操作と検証を実装できます。
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); // SELECT * FROM round_table // WHERE noble_title = "Sir" // ORDER BY first_name // LIMIT 10 OFFSET 20 $where = $db->quoteInto('noble_title = ?', 'Sir'); $order = 'first_name'; $count = 10; $offset = 20; $rowset = $table->fetchAll($where, $order, $count, $offset); ?>
同様に、独自の find() メソッドを設定して、主キー以外の他のフィールドを通じてデータをクエリすることもできます。 .
<?php class RoundTable extends Zend_Db_Table { public function insert($data) { // 添加一个时间戳 if (empty($data['created_on'])) { $data['created_on'] = time(); } return parent::insert($data); } public function update($data) { // 添加一个时间戳 if (empty($data['updated_on'])) { $data['updated_on'] = time(); } return parent::update($data); } } ?>
この記事で説明する内容が、PHP プログラミング フレームワークに基づいて皆様のお役に立つことを願っています。
Zend Framework チュートリアルでの Zend_Db_Table の使用法の詳細な説明については、PHP 中国語 Web サイトに注目してください。