Zend_Db_Tableによるリレーションの実装

intro
Zend_Db_Tableを利用してリレーションを実装します。ソースコードはこちらからダウンロードできます。

1.bootstrap.phpとconfig.iniの作成
以下のようにapplication/bootstrap.phpファイルを作成します。

以下のようにapplication/config.iniファイルを作成します。
環境に合わせてdatabase.params以下を変更してください。

この記事では以下のSQLを使用しました(MySQL)。
2.モデルの作成
以下のようにapplication/models/Users.phpファイルを作成します。

上記の$_dependentTablesプロパティにUsersテーブルに依存するテーブルを記述します。
次に以下のようにapplication/models/Profiles.phpファイルを作成します。

上記の$_referenceMapプロパティにProfilesテーブルが参照するテーブルを記述します。
以下のルールを$_referenceMapに記述できます。

ルール 説明
columns 文字列または文字列の配列で、参照元の列名を指定します
refTableClass 参照するテーブル名を指定します
refColumns 文字列または文字列の配列で、参照先の列名を指定します
onDelete 親テーブルの行を削除した際の動作を指定します。
文字列'cascade'またはself::CASCADEを指定すると関連する行が削除されます。
デフォルトでは連鎖削除は行われません。
onUpdate 親テーブルの行の主キーが更新された際の動作を指定します。
文字列'cascade'またはself::CASCADEを指定すると参照元の列が更新されます。
デフォルトでは連鎖更新は行われません。
3.コントローラの作成
以下のようにapplication/constorllers/IndexController.phpファイルを作成します。

上記のうち$user->findProfiles()でUsersテーブルの行からProfilesテーブルの行を取得しています。以下のように記述することもできます。

また、Profilesテーブルの行からUsersテーブルの行を取得する場合は以下のように記述できます。
4.ビューの作成
以下のようにapplication/views/scripts/index/index.phtmlファイルを作成します。

5.確認
Webサーバにアクセスして親テーブルと子テーブルの情報が表示されることを確認してみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です