メッセージシステム(ユーザー間)をcakephp
フレームワークに実装しようとしています。したがって、次のテーブルを作成しました。
メッセージ
- id
- タイトル
- 体
- sender_id
- 作成した
- response_on
Messages_Users
- id
- message_id
- receive_id
Messages_Usersテーブルは、送信された各メッセージの受信者を格納するために使用されます。次に、このような対応するモデルを作成し、モデル間の関係を設定します。
メッセージのモデル
<?php class Message extends Model{
public $hasMany = array(
'MessageUser'=>array(
'className'=>'MessagesUser',
'foreign Key'=>'message_id')
);
public $belongsTo = array (
'User' =>array(
'className'=>'User',
'foreignKey'=>'sender_id')
);
public $hasAndBelongsTo = array(
'Message'=>array(
'className'=>'Message',
'foreignKey'=>'response_on')
);
}
MessageUserのモデル
<?php
class MessageUser extends Model{
public $belongsTo = array (
'User'=>array(
'className'=>'User',
'foreignKey'=>'user_id'),
array(
'Message'=>array(
'className'=>'Message',
'foreignKey'=>'message_id')
)
);
ユーザーのモデル
class User extends AppModel{
public $hasAndBelongsTo = array(
'Message'=>array(
'joinTable' =>'messages_users',
'className' =>'Message',
'foreignKey' =>'recipient_id',
'associationForeignKey' =>'message_id')
);
次に、MessagesControllerに、データベースに保存されているすべてのメッセージを表示する関数inbox()を実装します。これらのメッセージは、対応するユーザーに送信されます。だから私のアプローチはMessagesControllerに関数を入れることでした
public function inbox(){
$uid = $this->Auth->user('id');
$messages = $this->Message->find('all', array(
'conditions' => array(
'recipient_id' => $uid)
)
);
上記の関数は、message_idを介してテーブルmessagesとmessages_usersの結合を実行し、テーブルmessages_usersのuser_idがrecipient_idと等しいデータのセットを選択する必要があります。
しかし、私が得るのはrecipient_id
、where句で列が見つからなかったというエラーだけです。
これらのテーブルを適切に結合するようにfindメソッドに指示するにはどうすればよいですか?モデルをリンクするだけで十分だと思ったので、残りはケーキの魔法でやってくれます。