PHP 開発フレームワーク Yii Framework チュートリアル (26) Database-Active Record の例

黄舟
リリース: 2023-03-05 09:06:02
オリジナル
1756 人が閲覧しました

Java または .Net を使用してデータベース アプリケーションを作成します。多くの人は、データベース プログラミングを大幅に簡素化できる Hibernate (または NHibernate) を使用して、オブジェクトの形式でデータベース (ORM) を読み書きしたり、Yii が提供する Active Record (AR) を使用したりしています。は、人気のあるオブジェクト リレーショナル マッピング (ORM) テクノロジでもあります。各 AR クラスはデータ テーブル (またはビュー) を表し、データ テーブル (またはビュー) の列はクラスの属性として AR クラスに反映され、AR インスタンスはテーブル内の行を表します。 一般的な CRUD 操作は AR メソッドとして実装されます。したがって、よりオブジェクト指向的な方法でデータにアクセスできます。

ここでは、Yii Framework 開発チュートリアル (24) のデータベース DAO サンプルを変更して、Active Record を使用して Employee テーブルを読み取る方法を確認します。

データテーブルにアクセスするには、まず CActiveRecord を統合して AR クラスを定義する必要があります。 各 AR クラスは個別のデータ テーブルを表し、AR インスタンスはそのテーブル内の行を表します。

AR クラスは複数の場所で参照されることが多いため、AR クラスを 1 つずつインポートするのではなく、AR クラスを含むディレクトリ全体をインポートできます。 たとえば、すべての AR クラス ファイルが protected/models ディレクトリにある場合、アプリケーションを次のように構成できます:

'import'=>array(
'application.models.*',
),
ログイン後にコピー

この例では、Employee クラスを次のように定義します:

class Employee extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'Employee';
}
}
ログイン後にコピー

データ内の列の値テーブル行は、対応する AR インスタンス アクセスの属性として使用できます。たとえば、$employee->EmployeeId は、Employee の EmployeeId フィールドにアクセスできます。

この例では、Employee テーブルを読み取り、SiteController の IndexAction メソッドを変更するだけです:

public function
actionIndex(){$model = Employee::model()->findAll();
$this->render('index', array('model' => $model,
));}
ログイン後にコピー

1 行のコード Employee::model()->findAll() がデータベースを読み取る機能を実現していることがわかります。テーブルと値の割り当てを見てみましょう レコードを表示するための対応するコード:

{
echo 'EmployeeId:' . $employee->EmployeeId . '';echo 'First Name:' . $employee->FirstName . '';
echo 'Last Name:' . $employee->LastName . '';echo 'Title:' . $employee->Title . '';
echo 'Address:' . $employee->Address . '';echo 'Email:' . $employee->Email . '';
echo '----------------------';}
?>
ログイン後にコピー

AR を使用すると、定義することなく、データベース テーブルのフィールド名 (大文字と小文字を区別) を通じてフィールド値に直接アクセスできることがわかります。これを Employee クラスに含めることで、コードが大幅に簡素化されます。

以前に Model を紹介したときに、CModel には 2 つのサブクラスがあり、1 つは FormModel、もう 1 つは CActiveRecord で、

レコードの作成

データ テーブルに新しい行を挿入するためのデータベース アクセス用の CRUD メソッドを定義すると言いました。対応する AR クラスのインスタンスを作成するには、テーブルの列に関連するプロパティを設定し、save() メソッドを呼び出して挿入を完了します

$employee=new Employee;
$employee->FirstName='James';
$employee->LastName='Shen';
...
$employee->save();
ログイン後にコピー

テーブルの主キーが自動インクリメントの場合、挿入が完了すると、AR インスタンスには主キーの更新が含まれます。列が静的なデフォルト値 (文字列、数値など) を使用してテーブル構造内に定義されている場合。

レコードを読み取る

データテーブル内のデータを読み取るには、次の方法で find series メソッドの 1 つを呼び出すことができます

// 指定された条件を満たす結果の最初の行を見つけます
$post=Post: :model()->find($condition,$params);
// 指定された主キー値を持つ行を検索します
$post=Post::model()->findByPk($postID,$condition,$ params);
//指定された属性値を持つ行を検索します
$post=Post::model()->findByAttributes($attributes,$condition,$params);
//指定された SQL ステートメントで結果を検索します。 line
$post=Post::model()->findBySql($sql,$params); 上記のように、Post::model() を通じて find メソッドを呼び出します。 静的メソッド model() はすべての AR クラスに必要であることに注意してください。 このメソッドは、クラスレベルのメソッド (静的クラス メソッドなど) にアクセスするために使用されるオブジェクトのコンテキストで AR インスタンスを返します。

find メソッドがクエリ条件を満たす行を見つけた場合、属性にデータ テーブル行の対応する列の値が含まれる Post インスタンスを返します。 その後、通常のオブジェクト プロパティと同様に、ロードされた値を読み取ることができます (例: echo $post->title;)。

指定されたクエリ基準を使用してデータベース内で何も見つからない場合、find メソッドは null を返します。

find を呼び出すときは、$condition と $params を使用してクエリ条件を指定します。ここで、$condition は SQL ステートメント内の WHERE 文字列にすることができ、$params は $condation 内のプレースホルダーに値をバインドする必要があるパラメーターの配列です。

レコードの更新

AR インスタンスが列の値を入力した後、値を変更してデータ テーブルに保存し直すことができます。

$post=Post::model()->findByPk(10);
$post->title='new post title';
$post->save(); // 将更改保存到数据库删除记录
ログイン後にコピー

AR インスタンスにデータ行が入力されている場合は、このデータ行を削除することもできます

$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10
$post->delete(); // 从数据表中删除此行注意,删除之后, AR 实例仍然不变,但数据表中相应的行已经没了
ログイン後にコピー

その他の情報については、Yii 中国語ドキュメント (http://www.yiiframework.com/doc/guide) を参照してください。 /1.1/zh_cn/database.ar )、ここでは詳しく説明しません。

この例は結果を示しています:

PHP 開発フレームワーク Yii Framework チュートリアル (26) Database-Active Record の例

上記は、PHP 開発フレームワーク Yii Framework チュートリアル (26) データベース - アクティブ レコードの例の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www) に注意してください。 .php.cn)!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート