複数モデルを連携する (5/6)
作成:2010-02-20 18:04
更新:2010-05-10 20:38
更新:2010-05-10 20:38
■belongsToによる連携
今度は、「Contentdata」側からの連携を考えてみましょう。Contentdataには、関連するMydataのIDが保管されています。この情報を元に、このContentdataに設定されているMydataを取り出し表示してみましょう。
では、「Contentdata」モデルクラス、「ContentdatasController」クラスのindexメソッド、そして「views」内の「contentdatas」フォルダ内に用意する「index.ctp」ファイルを、それぞれ下のリストのように修正しましょう。そして、http://localhost/cakesample/contentdatasにアクセスすると、各データに、Contentdataと、それに関連するMydataがセットで表示されるようになります。
ここで用いているのは「belongsTo」というものです。これは「hasOneの逆バージョン」といった働きをします。hasOneではMydata側から、関連するContentdataを取り出し表示しましたが、belongsToでは、Contentdata側から、関連付けているMydataを取り出す、というわけです。
では、「Contentdata」モデルクラス、「ContentdatasController」クラスのindexメソッド、そして「views」内の「contentdatas」フォルダ内に用意する「index.ctp」ファイルを、それぞれ下のリストのように修正しましょう。そして、http://localhost/cakesample/contentdatasにアクセスすると、各データに、Contentdataと、それに関連するMydataがセットで表示されるようになります。
ここで用いているのは「belongsTo」というものです。これは「hasOneの逆バージョン」といった働きをします。hasOneではMydata側から、関連するContentdataを取り出し表示しましたが、belongsToでは、Contentdata側から、関連付けているMydataを取り出す、というわけです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※Contentdataの修正 class Contentdata extends AppModel { public $belongsTo = "Mydata"; } ※ContentdatasControllerクラスのindexメソッド function index(){ $this->set("page_title","Sample Add Page"); $this->set("content_header","Sample Add Page."); $this->set("content_footer","copyright SYODA-Tuyano. 2010."); $this->set("datas",$this->Contentdata->find("all")); } ※「views」「contentdatas」のindex.ctp <h1>データの一覧リスト</h1> <pre> <?PHP print_r($datas); ?> </pre>
※関連コンテンツ
「初心者のためのCakePHP 1.3 プログラミング入門」に戻る