SNSっぽい友達系の処理をつくってみる(CakePHP修行 #39)
August 2, 2007 3:47 AM written by Gen Taguchi
さて友達系処理の続き。
■ アソシエーション
そうだった。前回の記事でアソシエーションについて書くのを忘れた。
UsersとFriendsのアソシエーションですが、よくよく考えたら1:nなので$hasManyで定義していきます。
まずはUser側。
var $hasMany = array ('Post',
'Friend'=>array('className'=>'Friend',
'conditions' => 'Friend.status = 1',
'foreignKey' => 'user_id'
)
);
ここではconditionsを使ってstatus=1のものだけ取り出すようにしてみました(ただ、これがうまく利いていないよう・・・あとで後述しますが)。
で、次にFriend側。
var $belongsTo = array('User' =>
array('className' => 'User',
'foreignKey' => 'friend_user_id'
)
);
こちら側から見るとアソシエーションする外部キーはuser_idではなくて、friend_user_idになるので注意・・・でいいんだよね?
こうした下準備を経て次へ移ります。
■ 友達一覧、送った招待状一覧を出す
さて/friends/の画面では友達一覧&送信済み招待状一覧を出すのですが、ここがちょっとわからない。

↑ 画面はこれね。
現在のコードはこんな感じ。まずはコントローラー側。
function index() {
// check login
$this->_checkLogin();
// sys message
$this->set('sys_msg', $this->Session->read('sys_msg'));
$this->Session->delete('sys_msg');
// get "my info"
$me = $this->User->findById_hash($_COOKIE['my_id']);
$this->set('me', $me);
$this->pageTitle = 'My Friends';
// set list
$this->set('friends', $this->Friend->findAllByUser_id($me['User']['id']));
}
で、View側。
<h3>My Friends</h3>
<ul id="friends" class="clear">
<?php
foreach ($friends as $friend) {
if ($friend['Friend']['status']==1) {
?>
<li><a href="/friends/detail/<?= $friend['User']['id']; ?>"><img src="<?= $friend['User']['pic_loc']; ?>" width="<?= $friend['User']['pic_width']; ?>" height="<?= $friend['User']['pic_height']; ?>" border="0" alt="<?= $friend['User']['name']; ?>" /></a></li>
<?php
}
}
?>
</ul>
<h3>Invitations sent</h3>
<ul>
<?php
foreach ($friends as $friend) {
if ($friend['Friend']['status']==0) {
?>
<li><?= $friend['User']['email']; ?> <a href="">[resend!]</a></li>
<?php
}
}
?>
これをみるとわかるとおり、とってきた$friendsの配列の中からstatusで分けて表示しています。これってなんかだめな感じだよね?本当はfindActiveFriends()とかを作ったほうがいいのだよね・・・その作り方がいまいちわからない・・・。モデルを拡張するのだと思うのだけど。
うーん、明日考えてみます。と、とりあえず寝る。
※ CakePHP修業は百式管理人がSNSっぽいものをCakePHPで作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。
Info: CakePHP修行! |
固定リンク |
コメント (0) |
トラックバック (0) |
↑


