プログラミング奮闘記録

プラグラマーへ奮闘。PHP・Cakephp・JavaScript・isoアプリのコード勉強ブログです。その他の言語やツールなども使用します。

cakephp メッセージ機能 

今日時間が多少あったので、メッセージ機能にやっと手をつけれました。

といっても、全然できてないですが。ww

 

 

テーブル構成を変更しました。

 

こんな感じです。

usersは以前と同じです。

 

messagesを変更しました。

前は、送信と受信を分けてテーブルを作成していましたが、

なんか無理??

と判断しましたので、変更です。

似たような機能を実装しようとしている方がいましたので!

cakephp.jp

 

ということで、質問者さんと同じテーブル構成にしました。

 

id

sender

receiver

body

created

modified

です。

 

まずはアソシエーション!!!

 

 

Message.php   Model

<?php
class Message extends AppModel {
public $belongsTo = array(
'Sender' => array('className' => 'User', 'foreignKey' => 'sender'),
'Resiver' => array('className' => 'User', 'foreignKey' => 'receiver'));
}

 

最低限度のみで。

 

 

ほんで、メッセージのテーブルに適当な情報を突っ込む!

 

突っ込んだ情報を取得したいが、ただfind('all')をしてきて取得しても意味がないので、

ログインしているユーザー情報を取得(id)して、送信者のカラムと取得したidが同じものだけを表示させる必要があります。

 

上記のテーブルでは、

ログインID = sender の情報を取得 →→ 送信フォルダ

ログインID = receiver の情報を取得 →→ 受信フォルダ

 

みたいな情報を取得する。

 

 

では、実装!!

MessageController.php コントローラー

public function index() {

$id = $this->set('user', $this->Auth->user());//ログイン情報を取得

$message=$this->Message->find(
'all',
array('conditions'=> array(
'Message.sender'=> array($this->Auth->user('id'))
))
);

$this->set('message',$message);

//$this->set('messages', $this->Message->find('all'));
}

 

 

 

$id = $this->set('user', $this->Auth->user());//ログイン情報を取得

これは、自分のメモのためにおいているだけです。

 

これであとは、いつも通りにviewを書く。

公式マニュアル通りで取得できます。

 

<?php foreach ($message as $message): ?>
<?php echo $message['Message']['sender']; ?>

<?php echo $message['Message']['receiver']; ?>
<?php echo $message['Message']['created']; ?>
<?php endforeach; ?>

 

これでオッケー!!!!