アソシエーション利用のデータアクセス (2) (2/5)
作成:2015-11-14 08:02
更新:2015-11-14 08:02
更新:2015-11-14 08:02
■Messagesのデータ取得
では、「View」リンクの処理からです。
これは、viewアクションとして用意されます。/view/1というように、表示するデータのID番号を指定してアクセスすることで、そのデータの詳細が表示されるようにする、というわけですね。Membersにあったものとだいたい同じです。
下にviewアクションのサンプルを掲載しておきます。これも、Membersのviewアクションと基本的にはかわらないことがわかるでしょう。
まず、getでID番号を指定してMessagesデータを検索します。このとき、第2引数にオプションとしてcontainを用意しておきます。これでインスタンスが得られるので、後はそれをmessageに代入し、_serializeの設定を行うだけです。
こうしてデータが得られたら、後はテンプレートの出番ですね。これは、ざっと以下のような形で出力すればよいでしょう。
ここでは、コントローラーから渡された$messagesの中から必要な値を出力しています。Messagesの内容は、こんな具合に指定すれば得られますね。
これは、viewアクションとして用意されます。/view/1というように、表示するデータのID番号を指定してアクセスすることで、そのデータの詳細が表示されるようにする、というわけですね。Membersにあったものとだいたい同じです。
下にviewアクションのサンプルを掲載しておきます。これも、Membersのviewアクションと基本的にはかわらないことがわかるでしょう。
$message = $this->Messages->get($id, [
'contain' => ['Members']
]);
まず、getでID番号を指定してMessagesデータを検索します。このとき、第2引数にオプションとしてcontainを用意しておきます。これでインスタンスが得られるので、後はそれをmessageに代入し、_serializeの設定を行うだけです。
$this->set('message', $message);
$this->set('_serialize', ['message']);
こうしてデータが得られたら、後はテンプレートの出番ですね。これは、ざっと以下のような形で出力すればよいでしょう。
<table class="vertical-table">
<tr>
<th><?= __('Member') ?></th>
<td><?= $message->has('member') ?
$this->Html->link($message->member->name,
['controller' => 'Members',
'action' => 'view', $message->member->id]) : '' ?></td>
</tr>
<tr>
<th><?= __('Id') ?></th>
<td><?= $this->Number->format($message->id) ?></td>
</tr>
</table>
<div class="row">
<h4><?= __('Title') ?></h4>
<?= $this->Text->autoParagraph(h($message->title)); ?>
</div>
<div class="row">
<h4><?= __('Comment') ?></h4>
<?= $this->Text->autoParagraph(h($message->comment)); ?>
</div>
ここでは、コントローラーから渡された$messagesの中から必要な値を出力しています。Messagesの内容は、こんな具合に指定すれば得られますね。
$message->titleこのMessagesデータに関連付けられているMembersデータは、$message->memberという値に保管されています。例えば、投稿した人の名前を出力するならば、
$message->comment
$message->member->nameこんな具合に指定すれば名前を得ることができます。アソシエーションの方式は、MembersとMessagesで違います(Membersから見ればMessagesはhas many、Messagesから見ればMembersはbelongs to)が、関連するデータの扱い方はまったく同じです。インスタンスの中に、関連するモデル名のプロパティがあり、そこにその関連モデルのインスタンスが代入されているのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
public function view($id = null) { $message = $this->Messages->get($id, [ 'contain' => ['Members'] ]); $this->set('message', $message); $this->set('_serialize', ['message']); }
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る