#11

先日からの続きです。
/users/home/に自分の予約したセミナーを表示するようにしてみる。
とりあえず、以下のようにソースを修正。

/controllers/users_controller.php

<?php
class UsersController extends AppController
{
  var $name = 'Users';
  var $uses = array('User','Seminar','Reserve');

  function home (){
    $this->checkSession();
    $this->set('me', $this->User->findById($this->Session->read('my_id')));
  }
	
}
?>

/models/user.php

<?php
class User extends AppModel
{
	var $name = 'User';
	var $validate = array (
		'email' => VALID_EMAIL,
	);
	var $hasMany = array ('Reserve');
}
?>

/models/seminar.php

<?php
class Seminar extends AppModel
{
	var $name = 'Seminar';
	var $hasMany = array('Reserve');
}
?>

/models/reserve.php

<?php
class Reserve extends AppModel
{
	var $name = 'Reserve';
	var $belongsTo = array('User','Seminar');
}
?>

/views/users/home.thtml

<div id="my_page">
<h2><a href="/users/home/"><?php echo $me['User']['name']; ?></a></h2>
<div id="contents">
<div id="menu" >
<ul>
<li><a href="/work/yoyaku/users/home">Home</a></li>
<li><a href="/work/yoyaku/users/seminar">Seminar</a></li>
<li><a href="/work/yoyaku/users/diary">Diary</a></li>
<li><a href="/work/yoyaku/users/edit">Settings</a></li>
<li><a href="/work/yoyaku/users/logout/">Logout</a></li>
</ul>
</div><!-- /menu -->
<h3>My Profile</h3>
<div id="my_profile" >
<p><?= $me['User']['profile']; ?></p>

<?php
print_r ($me);
print "<br>";
?>

</div>
</div>
</div>

実行結果

セミナーの情報までは取れていないですね。

で、ここを参照。
http://cakephp.jp/doc/ch06s03.html
$recursiveってやつを使えばよさそうです。
(reserveの情報が取れているということは、
デフォルトは$recursive = 1なのかな)

で、これをUserモデルに追加すればいいんだよな?
ということで、

/models/user.php

<?php
class User extends AppModel
{
  var $name = 'User';
  var $recursive = 2;
  var $validate = array (
    'email' => VALID_EMAIL,
  );
  var $hasMany = array ('Reserve');
}
?>


なんかうまくいったっぽい。


ついでに以下をちょっと見たところ、
http://cakephp.jp/doc/ch06s04.html#id4803164
reserveテーブルはJOINテーブルに当たるらしいということが判明。
cakePHPの標準に従うために、テーブル名も変更してみよう。
変更したら、hasAndBelongsToManyを使うんだな。

ということで、今日はここまで!