


Zend Framework チュートリアル Zend_Db_Table テーブル関連付け例の詳細な説明、zendzend_db_table_PHP チュートリアル
Zend Framework チュートリアル: Zend_Db_Table テーブル関連付けの例の詳細な説明、zendzend_db_table
この記事では、Zend Framework での Zend_Db_Table テーブル関連付けの使用方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
紹介:
RDBMSでは、テーブル間には1対多対応、多対多対応など様々な関係があります。
Zend フレームワークは、これらの関係の実装を容易にするいくつかのメソッドを提供します。
関係の定義:
この記事で使用される例の関係定義は次のとおりです:リーリー
この例では、Accounts、Products、Bugs、BugsProducts という 4 つのクラスが定義されています。このうち、Accounts、Products、および Bugs は 3 つのエンティティ テーブルであり、BugsProducts はリレーションシップ テーブルです。これら 3 つのエンティティをもう一度分析してみましょう。アカウントには複数のバグがあり、それらの間には 1 対多の関係がありますが、バグと製品には多対多の関係があります。
$_dependentTables は、オブジェクトに関連付けられたオブジェクト名です。ここでは、関連付けられたデータベース名の代わりにオブジェクト名を記述する必要があります。
$_referenceMap 配列は、他のテーブルとの関係を定義するために使用され、それらのテーブルとの関係と、どのような関係があるかを設定できます。最初に設定するのはルールキーで、上記の例では「Reporter」や「Engineer」などです。ルール キーの機能は実際にはリレーションシップの名前であり、他のデータベース テーブル名や他のオブジェクト名と同じである必要はありません。マーキングのためだけに、このルール キーの役割は後で確認できます。
各ルールの下にはいくつかの定義があります: (特別な指示はありません。すべては上記の「レポーター」関係で説明されています)
columns=> 他のテーブルに関連付けられたフィールド名を設定します。上記の「report_by」は、データベース内のテーブル Bugs の report_by フィールドです。ここではフィールドは 1 つだけですが、複数のフィールドを設定することもできます。
refTableClass=> このテーブルに関連するテーブルを設定するために使用されます。ここで、テーブル名の代わりにターゲット テーブルのオブジェクトの名前を使用する必要があることに注意してください。この例では、「Account」オブジェクトに関連付けられています。
refColumns =>コンタクトが発生するテーブルのフィールドを設定します。複数のフィールドに関連する場合は、複数の列に対応させる必要があります。この設定は実際にはオプションです。空の場合、関連フィールドは関連テーブルの主キーとして自動的に設定されます。上記の例では、主キーは関連フィールドとして使用されないため、手動で設定されます。
onDelete=> オプションのフィールドで、削除時のアクションを設定します。
onUpdate=> オプションのフィールドで、テーブルを更新するときのアクションを設定します。
関連テーブルからデータを取得します:
すでにクエリ結果を取得している場合は、次のステートメントを使用して、この結果に関連付けられたテーブルのクエリ結果を取得できます。 リーリーこの方法では通常、1対多に対応する2つのエンティティテーブルと、多対多に対応する1つのリレーションシップテーブルを使用します。一方のエンティティテーブルともう一方のエンティティテーブルからデータを取得する方法を以下に説明します。
最初のフィールド $table は、このテーブルに関連付けられるテーブルに対応するクラス名を参照します。 2 番目のフィールドはオプションであり、先ほど述べたルール キーであり、省略した場合は、テーブル内の最初のリレーションシップがデフォルトになります。以下に例を示します:
リーリーこの例では、最初に 1234 という番号のユーザーを読み取り、次にこの人物が報告したバグを見つけました。デフォルトでは zend が最初の関連付けであるため、ここでのアカウントに関連付けられている最初の関連付けは「Reporter」であるため、Reporter レコードが削除されました。
エンジニアなどの他のレコードを取り出したい場合は、次の方法に従うことができます:
リーリー findDependentRowset の使用に加えて、「Magic Method」と呼ばれる仕組みを使用することもできます。なぜそう呼ばれるかというと、手品のようなものだからです。したがって、メソッド findDependentRowset('
- $row->find
注: このメカニズムは Ruby on Rails で初めて見られました。ここでの
1 対多の関係で 1 から多に取得する方法を紹介しました。今度は、多から 1 を取得します。実際には、多の中の 1 つから対応するレコードを取得します。
同様に、次のステートメントもあります:
リーリー同様に、$table はクラス名で、オプションのパラメーター $rule には対応するルール キーが入力されます。以下に例を示します:
リーリー上記との違いは、上記で返されるのは複数のレコードのコレクションであり、今回返されるのは 1 つのレコードである必要があることです。次の例は、ルールを設定する例です:
リーリールールを記入するだけです。同様に、このメソッドにも「魔法のフィールド」があります。 findParentRow('
- $row->findParent
- $row->findParent
例子:
取得多对多关系表的字段:
上面两个方法讲述了一对多的使用,下面就是多对多了。我们使用如下方法取得多对多关系表的数据:
$row->findManyToManyRowset($table, $intersectionTable, [$rule1, [$rule2]]);
这里参数变成了4个,因为需要增加一个关系表来存储多对多的关系。
$table是与之发生多对多关系的表的类名,$intersectionTable是中间存储关系的关系表的类名。$rule1和$rule2是上面两个数据表的Rule Key。省略Rule Key的例子如下:
<?php $bugsTable = new Bugs(); $bugsRowset = $bugsTable->find(1234); $bug1234 = $bugsRowset->current(); $productsRowset = $bug1234->findManyToManyRowset('Products', 'BugsProducts');
下面是该方法的全部参数调用例子:
<?php $bugsTable = new Bugs(); $bugsRowset = $bugsTable->find(1234); $bug1234 = $bugsRowset->current(); $productsRowset = $bug1234->findManyToManyRowset('Products', 'BugsProducts', 'Bug');
这次的“魔术方法”是,对应 findManyToManyRowset('
- $row->find
- $row->find
- $row->find
例子:
<?php $bugsTable = new Bugs(); $bugsRowset = $bugsTable->find(1234); $bug1234 = $bugsRowset->current(); // Use the default reference rule $products = $bug1234->findProductsViaBugsProducts();// Specify the reference rule $products = $bug1234->findProductsViaBugsProductsByBug();
更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。
您可能感兴趣的文章:
- Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
- Zend Framework教程之Zend_Db_Table_Row用法实例分析
- Zend Framework教程之Zend_Db_Table用法详解
- Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
- Zend Framework开发入门经典教程
- Zend Framework框架Smarty扩展实现方法
- Zend Framework框架路由机制代码分析
- Zend Framework实现具有基本功能的留言本(附demo源码下载)
- Zend Framework实现将session存储在memcache中的方法
- Zend Framework分页类用法详解
- Zend Framework实现多文件上传功能实例
- Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
- Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











開発者とエンド ユーザーが Windows 上で最新バージョンのアプリケーションを実行するには、.NET Framework 4 が必要です。しかし、.NET Framework 4 のダウンロードとインストール中に、多くのユーザーから、インストーラーが途中で停止し、「ダウンロードがエラー コード 0x800c0006 で失敗したため、.NET Framework 4 はインストールされていません」というエラー メッセージが表示されるという苦情が寄せられました。デバイスに .NETFramework4 をインストールしているときにもこの問題が発生する場合は、正しい場所にいます。

Oracle と DB2 は、エンタープライズ アプリケーションで広く使用されている 2 つのよく知られたリレーショナル データベース管理システム (RDBMS) です。この記事では、Oracle と DB2 の 2 つのデータベース テクノロジーを比較し、その特徴、パフォーマンス、機能、使用例の分析を含めて詳しく分析します。 1. Oracle データベース技術の概要 Oracle は、米国 Oracle Corporation が開発したリレーショナル データベース管理システムです。エンタープライズレベルのアプリケーションで広く使用されており、強力なパフォーマンスと安定性を備えています。

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

Windows 11 または Windows 10 PC でアップグレードまたはアップデートの問題が発生すると、通常、失敗の背後にある実際の理由を示すエラー コードが表示されます。ただし、エラー コードが表示されずにアップグレードまたはアップデートが失敗すると、混乱が生じることがあります。便利なエラー コードを使用すると、問題の場所が正確にわかるので、修正を試みることができます。ただし、エラー コードが表示されないため、問題を特定して解決することが困難になります。エラーの背後にある理由を見つけるだけでも多くの時間がかかります。この場合、Microsoft が提供する SetupDiag という専用ツールを使用すると、エラーの背後にある本当の理由を簡単に特定できます。
![SCNotification が動作を停止しました [問題を解決する 5 つのステップ]](https://img.php.cn/upload/article/000/887/227/168433050522031.png?x-oss-process=image/resize,m_fill,h_207,w_330)
Windows ユーザーは、コンピュータを起動するたびに「SCNotification は動作を停止しました」というエラーに遭遇する可能性があります。 SCNotification.exe は Microsoft システム通知ファイルであり、アクセス許可エラーやネットワーク障害が原因で PC を起動するたびにクラッシュします。このエラーは、問題のあるイベント名でも知られています。したがって、これは SCNotification が動作を停止したということではなく、バグ clr20r3 として認識される可能性があります。この記事では、SCNotification が動作を停止した問題を修正して再び悩まされないようにするために必要なすべての手順を説明します。 SCNotification.eとは何ですか

Oracle データベースと DB2 データベースは、エンタープライズ レベルのアプリケーションで広く使用されている 2 つの主要なリレーショナル データベース管理システムです。実際のアプリケーションでは、データベースのパフォーマンスがデータベース システムの品質を評価するための重要な指標の 1 つになることがよくあります。この記事では、Oracle データベースと DB2 データベースのパフォーマンスを比較分析し、特定のコード例を使用してそれらの違いを示します。 1. Oracle データベースのパフォーマンス分析 Oracle データベースは、拡張性と安定性に優れた強力なデータベース管理システムです。

dbとは「datebase」の略で、「データベースファイル」の形式の一つで、ソフトウェアがデータベースに相当するデータを保存するためのファイルで、ソフトウェアごとに保存形式が異なります。たとえば、Win7 システムの「Thumbs.db」はサムネイル データ ファイルであるため、db ファイルは特定のファイル形式ではありません。

Microsoft.NET バージョン 4.5.2、4.6、または 4.6.1 をインストールしている Microsoft Windows ユーザーが、将来の製品更新を通じて Microsoft にフレームワークをサポートさせることを希望する場合は、新しいバージョンの Microsoft Framework をインストールする必要があります。 Microsoft によると、3 つのフレームワークはすべて 2022 年 4 月 26 日にサポートを終了します。サポート期限が終了すると、製品は「セキュリティ修正またはテクニカル サポート」を受けられなくなります。ほとんどのホーム デバイスは、Windows アップデートを通じて最新の状態に保たれます。これらのデバイスには、.NET Framework 4.8 などの新しいバージョンのフレームワークがすでにインストールされています。自動的に更新されないデバイスは、
