ホームページ >php教程 >PHP开发 >Zend Framework チュートリアルでの Zend_Db_Table の使用法の詳細な説明

Zend Framework チュートリアルでの Zend_Db_Table の使用法の詳細な説明

高洛峰
高洛峰オリジナル
2017-01-05 09:54:391413ブラウズ

この記事の例では、Zend_Db_Table の使用法について説明します。以下のように、皆さんと共有してください:

1. はじめに

Zend_Db_Table は Zend Framework のテーブル モジュールで、zend_db_adapter を通じてデータベースに接続し、データベース スキーマのテーブル オブジェクトをチェックし、テーブルを操作してクエリします。

2. まず、抽象クラス zend_db_table のデフォルトのデータベース アダプターを設定する必要があります (注意: このクラスは抽象クラスであるため、直接インスタンス化できません。最初にこのクラスを継承することしかできません。他のタイプのデータベース アダプターを指定しない限り、すべての zend_db_table クラス インスタンスはデフォルトのアダプターを使用します

<?php
// 建立一个 adapter
require_once &#39;Zend/Db.php&#39;;
$params = array (
  &#39;host&#39;   => &#39;127.0.0.1&#39;,
  &#39;username&#39; => &#39;malory&#39;,
  &#39;password&#39; => &#39;******&#39;,
  &#39;dbname&#39;  => &#39;camelot&#39;
);
$db = Zend_Db::factory(&#39;PDO_MYSQL&#39;, $params);
// 为所有的Zend_Db_Table对象设定默认的adapter
require_once &#39;Zend/Db/Table.php&#39;;
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
{
  // 默认表名为 &#39;class_name&#39;
  // 但是我们也可以对应其它表
  protected $_name = &#39;another_table_name&#39;;
}
?>

zend_db_table クラスのデフォルトのフィールド "id" は次のとおりです。テーブルの主キー (このフィールドは自動インクリメントされることが望ましいですが、必須ではありません)。テーブルの主キーの名前が "$id" でない場合は、テーブル エンティティ クラスを定義するときに $_primary を再構築できます

<?php
class ClassName extends Zend_Db_Table
{
  // 默认主键为&#39;id&#39;
  // 但我们也可以设定其他列名为主键
  protected $_primary = &#39;another_column_name&#39;;
}
?>

テーブル エンティティ クラスで _setup() メソッドを使用することもできます。これらの変数を設定します。ただし、変更後は必ずparent::_setup() メソッドを再度実行してください。

<?php
class ClassName extends Zend_Db_Table
{
  protected function _setup()
  {
    $this->_name = &#39;another_table_name&#39;;
    $this->_primary = &#39;another_column_name&#39;;
    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(
  &#39;noble_title&#39; => &#39;King&#39;,
  &#39;first_name&#39; => &#39;Arthur&#39;,
  &#39;favorite_color&#39; => &#39;blue&#39;,
)
$id = $table->insert($data);
?>

5. データを更新する

テーブル内のデータの行を変更するには、列名を設定します。データの連想配列をパラメータとして受け取り、update() メソッドを呼び出します。このメソッドは、同じ where 条件節を通じて変更する必要がある行を決定し、テーブル内のデータを変更し、変更された行の数を返します。 (Zend フレームワード) は変更されたデータを自動的に引用しますが、このチェックには条件句が含まれていないため、

class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
$set = array(
  &#39;favorite_color&#39; => &#39;yellow&#39;,
)
$where = $db->quoteInto(&#39;first_name = ?&#39;, &#39;Robin&#39;);
$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(&#39;first_name = ?&#39;, &#39;Patsy&#39;);
$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));
?>

8.主キーを介して対応するデータ行を見つけるのは非常に便利ですが、多くの場合、データ行を見つけるために他のいくつかの非主キー条件が使用され、この関数を呼び出すことができる fetchRow() メソッドが提供されます。 fetchRow() メソッドを where 条件ステートメント (およびオプションの order ステートメント) を通じて実行すると、zend_db_tabel はデータの最初の行の条件を満たす zend_db_table_row オブジェクトを返します。

(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(&#39;noble_title = ?&#39;, &#39;Sir&#39;)
    . $db->quoteInto(&#39;AND first_name = ?&#39;, &#39;Robin&#39;);
$order = &#39;favorite_color&#39;;
$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(&#39;noble_title = ?&#39;, &#39;Sir&#39;);
$order = &#39;first_name&#39;;
$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[&#39;created_on&#39;])) {
      $data[&#39;created_on&#39;] = time();
    }
    return parent::insert($data);
  }
  public function update($data)
  {
    // 添加一个时间戳
    if (empty($data[&#39;updated_on&#39;])) {
      $data[&#39;updated_on&#39;] = time();
    }
    return parent::update($data);
  }
}
?>

この記事で説明する内容が、PHP プログラミング フレームワークに基づいて皆様のお役に立つことを願っています。

Zend Framework チュートリアルでの Zend_Db_Table の使用法の詳細な説明については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。