libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

複数Modelの連携 (3/6)

作成:2011-12-19 08:01
更新:2011-12-19 08:01

■一対一対応の「hasOne」

では、Modelの連携を行なってみましょう。まずはGuestBook……ではなく、MySampleDataのほうを開いてください。そしてクラスを下に掲載したように書き換えてみましょう(バリデーションなどはそのまま残しておいてかまいません)。

このMySampleDataも、やはりScaffoldを利用することにしましょう。コントローラーを修正し、アクセスしてみてください。Scaffoldを使うと、データの一覧が表示され、その内容の表示などを行う「View」ボタンが表示されます。この「View」を使って各項目の内容を表示させてみましょう。

GuestBook側で、そのデータに関連付けられたデータが用意されていた場合、MySampleDataの内容の下に、関連するGuestBookのデータが表示されます。MySampleDataGuestBookが関連付けられて認識されていることがわかるでしょう。(ただし、現段階では、表示されるのは関連付けられたデータ1つのみです。複数のデータが関連付けられている場合は、最初の1つだけが取り出されます)

今回、Modelクラスに記述した「$hasOne」という変数は、一般に「一対一対応」と呼ばれる関連付けを指定するものです。これは「このModelのデータに、関連する別のModelのデータが1つある」というものです。ここでは、
public $hasOne = "GuestBook";
このように記述されていました。ということは、このMySampleDataの各データには、GuestBookのデータ1つが結び付けられている、ということになります。関連するデータの情報は、もちろんGuestBookmy_sample_data_idに関連するMySampleDataID番号を保管して設定されます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※MySampleDatasController.php

class MySampleDatasController extends AppController {
  public $scaffold; 
}


※MySampleData.php
class MySampleData extends AppModel {
  public $hasOne = "GuestBook";
}

※関連コンテンツ

「初心者のためのCakePHP2 プログラミング入門」に戻る