我正在尝试在我的cakephp
框架中实现一个消息系统(用户到用户)。因此我创建了以下表格:
留言
- ID
- 标题
- 身体
- 发件人ID
- 创建
- response_on
Messages_Users
- ID
- message_id
- 收件人 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 等于receiver_id 的数据集。
但我得到的只是一个错误,说recipient_id
在 where 子句中找不到该列。
如何指示 find 方法正确连接这些表?我认为连接模型就足够了,所以蛋糕魔法会处理剩下的事情。