ホームページ > バックエンド開発 > PHPチュートリアル > Zend Framework チュートリアル Zend_Db_Table テーブル関連付け例の詳細な説明、zendzend_db_table_PHP チュートリアル

Zend Framework チュートリアル Zend_Db_Table テーブル関連付け例の詳細な説明、zendzend_db_table_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:56:15
オリジナル
753 人が閲覧しました

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()

- $row->findBy()


注: このメカニズムは Ruby on Rails で初めて見られました。ここでの は、有効になる前に、関連するクラス名および関連付け名 (ルール キー) とまったく同じである必要があります。以下に例を示します:

リーリー リーリー

親テーブルからフィールドを取得します:

1 対多の関係で 1 から多に取得する方法を紹介しました。今度は、多から 1 を取得します。実際には、多の中の 1 つから対応するレコードを取得します。

同様に、次のステートメントもあります:

リーリー

同様に、$table はクラス名で、オプションのパラメーター $rule には対応するルール キーが入力されます。以下に例を示します:

リーリー

上記との違いは、上記で返されるのは複数のレコードのコレクションであり、今回返されるのは 1 つのレコードである必要があることです。次の例は、ルールを設定する例です:

リーリー

ルールを記入するだけです。同様に、このメソッドにも「魔法のフィールド」があります。 findParentRow('', '') は以下に対応します:

- $row->findParent()
- $row->findParentBy()

例子:

取得多对多关系表的字段:

上面两个方法讲述了一对多的使用,下面就是多对多了。我们使用如下方法取得多对多关系表的数据:

$row->findManyToManyRowset($table, $intersectionTable, [$rule1, [$rule2]]);

ログイン後にコピー

这里参数变成了4个,因为需要增加一个关系表来存储多对多的关系。

$table是与之发生多对多关系的表的类名,$intersectionTable是中间存储关系的关系表的类名。$rule1和$rule2是上面两个数据表的Rule Key。省略Rule Key的例子如下:

<&#63;php
$bugsTable    = new Bugs();
$bugsRowset    = $bugsTable->find(1234);
$bug1234     = $bugsRowset->current();
$productsRowset  = $bug1234->findManyToManyRowset('Products', 'BugsProducts');

ログイン後にコピー

下面是该方法的全部参数调用例子:

<&#63;php
$bugsTable    = new Bugs();
$bugsRowset    = $bugsTable->find(1234);
$bug1234     = $bugsRowset->current();
$productsRowset  = $bug1234->findManyToManyRowset('Products', 'BugsProducts', 'Bug');

ログイン後にコピー

这次的“魔术方法”是,对应 findManyToManyRowset('', '', '', '')
- $row->findVia()
- $row->findViaBy()
- $row->findViaByAnd()

例子:

<&#63;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源码下载)

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1113708.htmlTechArticleZend Framework教程之Zend_Db_Table表关联实例详解,zendzend_db_table 本文实例讲述了Zend Framework中Zend_Db_Table表关联用法。分享给大家供大家参考,具...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート