ホームページ バックエンド開発 PHPチュートリアル PHP 開発フレームワーク Yii Framework チュートリアル (27) データベース関連のアクティブ レコードの例

PHP 開発フレームワーク Yii Framework チュートリアル (27) データベース関連のアクティブ レコードの例

Jan 22, 2017 am 09:30 AM

アクティブ レコード (AR) を使用して単一のデータ テーブルからデータを取得する方法について見てきました。 このセクションでは、AR を使用して複数の関連データ テーブルを接続し、結合されたデータ セットを取得する方法について説明します。

リレーショナル AR を使用するには、関連付ける必要があるテーブルに主キーと外部キーの制約を定義することをお勧めします。これらの制約は、関連データの一貫性と整合性を確保するのに役立ちます。

このサンプルでは、​​Yii Framework Development Tutorial (25) Database-Query Builder Example を変更して、複数の関連テーブルに対して Active Record を使用する方法を紹介します。

AR を使用して関連クエリを実行する前に、ある AR クラスが別の AR クラスにどのように関連しているかを AR に知らせる必要があります。

2 つの AR クラス間の関係は、AR クラスによって表されるデータ テーブル間の関係を通じて直接関連付けられます。 データベースの観点から見ると、テーブル A と B の間には 3 種類のリレーションシップがあります。1 対多 (tbl_user と tbl_post など)、1 対 1 (tbl_user と tbl_profile など)、および多対 1 多 ( tbl_category や tbl_post などの多対多)。 AR には 4 つの関係があります:

BELONGS_TO (所属): テーブル A と B の間の関係が 1 対多の場合、テーブル B はテーブル A に所属します (たとえば、Post はユーザー

に所属します)。 HAS_MANY (複数ある): テーブル A と B の関係が 1 対多の場合、A には複数の B があります (たとえば、User には複数の Post があります)

HAS_ONE (1 つあります): これは特殊なケースです。 HAS_MANY のうち、A には B が最大 1 つあります (たとえば、ユーザーにはプロファイルが最大 1 つあります);

MANY_MANY: これは、データベース内の多対多の関係に対応します。 ほとんどの DBMS は多対多の関係を直接サポートしていないため、多対多の関係を 1 対多の関係に分割するには関係テーブルが必要です。 この例のデータ構造では、tbl_post_category がこの目的に使用されます。 AR 用語では、MANY_MANY を BELONGS_TO と HAS_MANY の組み合わせとして解釈できます。 たとえば、Post は多くの カテゴリに属し、カテゴリには多くのカテゴリがあります。Post.

AR で定義された関係は、CActiveRecord の relationship() メソッドをオーバーライドする必要があります。このメソッドは、関係構成の配列を返します。配列の各要素は、次の形式で単一の関係を表します。

クエリ ビルダーでは、次の SQL クエリ ステートメントを使用しました

SELECT c.FirstName, c.LastName , c.Address,c.Email
FROM customer c
INNER JOIN
employee e
ON c.SupportRepId=e.EmployeeId
ログイン後にコピー


WHERE e.EmployeeId=4 には、Employee と Customer という 2 つのテーブルが含まれます。従業員と顧客の間には 1 対多の関係があり、従業員が責任者となることができます。複数のクライアント向け。従業員と顧客の関係は HAS_MANY で、顧客と従業員の関係は HAS_ONE です。したがって、Employee と Customer は次のように定義できます。

//Customer.phpclass Customer extends CActiveRecord{
public static function model($className=__CLASS__){return parent::model($className);}
public function tableName(){return 'Customer';}
}
//Employee.phpclass Employee extends CActiveRecord{
public static function model($className=__CLASS__){return parent::model($className);}
public function tableName(){return 'Employee';}
public function relations(){return array('customers'=>array(self::HAS_MANY, 'Customer', 'SupportRepId'),
);}}
ログイン後にコピー

この例では、Employee クエリに対応する Customer のみを使用するため、クラスには Relations メソッドのみが定義されます。対応するテーブルと外部キーは Customer と SupportRepId です。
次に、SiteController の IndexAction メソッドを変更します。

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

AR クラスのリレーションシップ定義は、リレーションシップごとにクラスに属性を暗黙的に追加します。相関クエリが実行されると、対応する属性に、関連付けられた AR インスタンスが設定されます。したがって、従業員に対応する顧客レコードは、$employee->customers からクエリできます。
相関クエリを実行する最も簡単な方法は、AR インスタンスの相関プロパティを読み取ることです。このプロパティに以前にアクセスしたことがない場合は、現在の AR インスタンスの主キーを使用して 2 つのテーブルとフィルターを結合する結合クエリが初期化されます。 クエリ結果は、関連付けられた AR クラスのインスタンスとしてプロパティに保存されます。これは伝説的な遅延読み込み (遅延読み込み、遅延読み込みとも訳される) メソッドです。たとえば、関連クエリは、関連オブジェクトに初めてアクセスしたときにのみ実行されます。
この例では遅延読み込みを使用していますが、場合によっては効率的ではありません。 N 個の投稿の作成者を取得したい場合、この遅延読み込みを使用すると、N 個の結合クエリが実行されます。 この場合、代わりに積極的な読み込みを使用する必要があります。
積極的な読み込みメソッドは、メインの AR インスタンスを取得するときに、関連する AR インスタンスを取得します。 これは、AR で find または findAll メソッドを使用するときに with メソッドを使用して行われます。例:

$employee=Post::model()->with ('customers')->findAll();
ログイン後にコピー

最後に、結果を表示するビューのコードを変更します。

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

データが異なると、列名の大文字と小文字が区別されます。安全のため、同じ属性を使用します。列定義として Customer を大文字と小文字で表します。

PHP 開発フレームワーク Yii Framework チュートリアル (27) データベース関連のアクティブ レコードの例

この例では、関連付けられた Active Record の最も基本的な使用法を紹介します。また、CodeSmith などのツールを使用してデータベース定義の ActiveRecord コードを自動的に生成できる場合は、Yii の中国語ドキュメントを参照してください。プログラマーの手動コード作成の負担が大幅に軽減されます。

さらに、Active Record を使用すると便利ですが、パフォーマンスが犠牲になります。一般に、Active Record を使用した場合のパフォーマンスは、DAO を使用してデータベースを読み書きするよりも 1 レベル悪くなります。次の表は、200 人の俳優と 1000 本の映画を検索するための参考値です。

PHP 開発フレームワーク Yii Framework チュートリアル (27) データベース関連のアクティブ レコードの例

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Symfony と Yii2: 大規模な Web アプリケーションの開発にはどちらのフレームワークが適していますか? Symfony と Yii2: 大規模な Web アプリケーションの開発にはどちらのフレームワークが適していますか? Jun 19, 2023 am 10:57 AM

Web アプリケーションの需要が高まるにつれ、開発者が開発フレームワークを選択する選択肢はますます増えています。 PHP フレームワークとして人気のある Symfony と Yii2 は、どちらも強力な機能とパフォーマンスを備えていますが、大規模な Web アプリケーションを開発する必要がある場合、どちらのフレームワークがより適しているのでしょうか。次に、より良い選択を行うために、Symphony と Yii2 の比較分析を行います。基本概要 Symphony は、PHP で書かれたオープンソースの Web アプリケーション フレームワークであり、上に構築されています。

PHP フレームワーク Yii を使用して可用性の高いクラウド バックアップ システムを開発する方法 PHP フレームワーク Yii を使用して可用性の高いクラウド バックアップ システムを開発する方法 Jun 27, 2023 am 09:04 AM

クラウド コンピューティング テクノロジの継続的な発展により、データのバックアップはすべての企業が行う必要のあるものになりました。この文脈では、可用性の高いクラウド バックアップ システムを開発することが特に重要です。 PHP フレームワーク Yii は、開発者が高性能の Web アプリケーションを迅速に構築できる強力なフレームワークです。ここでは、Yii フレームワークを使用して可用性の高いクラウド バックアップ システムを開発する方法を紹介します。データベースモデルの設計 Yii フレームワークでは、データベースモデルは非常に重要な部分です。データ バックアップ システムには多くのテーブルとリレーションシップが必要なため、

Yii フレームワークでのデータクエリ: データに効率的にアクセスする Yii フレームワークでのデータクエリ: データに効率的にアクセスする Jun 21, 2023 am 11:22 AM

Yii フレームワークは、Web アプリケーション開発のプロセスを簡素化するための多数のツールとコンポーネントを提供するオープンソースの PHP Web アプリケーション フレームワークであり、その重要なコンポーネントの 1 つがデータ クエリです。 Yii フレームワークでは、SQL に似た構文を使用してデータベースにアクセスし、データを効率的にクエリおよび操作できます。 Yii フレームワークのクエリビルダーには主に次の種類があります: ActiveRecord クエリ、QueryBuilder クエリ、コマンド クエリ、独自の SQL クエリ

Yii2 と Phalcon: グラフィック レンダリング アプリケーションの開発にはどちらのフレームワークが適していますか? Yii2 と Phalcon: グラフィック レンダリング アプリケーションの開発にはどちらのフレームワークが適していますか? Jun 19, 2023 am 08:09 AM

現在の情報化時代では、ビッグデータ、人工知能、クラウド コンピューティング、その他のテクノロジーが大手企業の焦点となっています。その中でも、高性能なグラフィックス処理技術として、グラフィックスカードレンダリング技術がますます注目を集めています。グラフィックス カード レンダリング テクノロジは、ゲーム開発、映画やテレビの特殊効果、エンジニアリング モデリングなどの分野で広く使用されています。開発者にとって、自分のプロジェクトに合ったフレームワークを選択することは非常に重要な決定です。現在の言語の中でも PHP は非常に動的な言語であり、Yii2、Ph などの優れた PHP フレームワークもいくつかあります。

PHPでYii3フレームワークを使用するにはどうすればよいですか? PHPでYii3フレームワークを使用するにはどうすればよいですか? May 31, 2023 pm 10:42 PM

インターネットの発展に伴い、Web アプリケーション開発の需要もますます高まっています。開発者にとって、アプリケーションの開発には、開発効率を向上させる、安定性、効率性、強力なフレームワークが必要です。 Yii は、豊富な機能と優れたパフォーマンスを提供する、優れた高性能 PHP フレームワークです。 Yii3 は Yii フレームワークの次世代バージョンであり、Yii2 に基づいてパフォーマンスとコード品質をさらに最適化します。この記事では、Yii3 フレームワークを使用して PHP アプリケーションを開発する方法を紹介します。

Yii2 プログラミングガイド: Cron サービスの実行方法 Yii2 プログラミングガイド: Cron サービスの実行方法 Sep 01, 2023 pm 11:21 PM

「Yii とは何ですか?」という質問がある場合は、私の以前のチュートリアル「Yii フレームワークの紹介」を参照してください。このチュートリアルでは、Yii の利点をレビューし、2014 年 10 月にリリースされた Yii 2.0 の新機能の概要を説明しています。うーん> この Yii2 によるプログラミング シリーズでは、読者に Yii2PHP フレームワークの使い方をガイドします。今日のチュートリアルでは、Yii のコンソール機能を活用して cron ジョブを実行する方法を共有します。以前、私はバックグラウンド タスクを実行するために cron ジョブで wget (Web アクセス可能な URL) を使用しました。これにより、セキュリティ上の懸念が生じ、パフォーマンス上の問題も発生します。 Security for Startup シリーズでリスクを軽減するいくつかの方法について説明しましたが、コンソール駆動のコマンドに移行したいと考えていました。

PHP 開発: Yii2 と GrapeJS を使用してバックエンド CMS とフロントエンドのビジュアル編集を実装する PHP 開発: Yii2 と GrapeJS を使用してバックエンド CMS とフロントエンドのビジュアル編集を実装する Jun 15, 2023 pm 11:48 PM

現代のソフトウェア開発において、強力なコンテンツ管理システム (CMS) を構築することは簡単な作業ではありません。開発者は広範なスキルと経験を持っている必要があるだけでなく、機能とパフォーマンスを最適化するために最先端のテクノロジーとツールを使用する必要もあります。この記事では、2 つの人気のあるオープン ソース ソフトウェアである Yii2 と GrapeJS を使用して、バックエンド CMS とフロントエンドのビジュアル編集を実装する方法を紹介します。 Yii2 は、迅速に構築するための豊富なツールとコンポーネントを提供する人気のある PHPWeb フレームワークです。

yii オブジェクトを配列に変換するか、json 形式に直接出力する方法 yii オブジェクトを配列に変換するか、json 形式に直接出力する方法 Jan 08, 2021 am 10:13 AM

Yiiフレームワーク:Yiiのオブジェクトを配列に変換したり、直接json形式に出力したりする方法を紹介する記事であり、参考になると思います。

See all articles