Join 在cakephp 2.x中实现消息系统

Join 在cakephp 2.x中实现消息系统,join,message,foreign-key-relationship,cakephp-2.1,Join,Message,Foreign Key Relationship,Cakephp 2.1,我试图在我的cakephp框架中实现一个消息系统(用户对用户)。 因此,我创建了以下表格: 信息 身份证 头衔 身体 发送者身份证 创造 回应 向用户发送的消息 身份证 消息id 收件人id Messages_Users表用于存储每个已发送邮件的收件人。 然后像这样创建相应的模型,并建立模型之间的关系 消息模型 现在,我想在MessagesController中实现一个函数inbox(),它显示存储在数据库中的所有消息,并将这些消息发送给相应的用户。 因此,我的方法是将函数放入MessagesC

我试图在我的
cakephp
框架中实现一个消息系统(用户对用户)。 因此,我创建了以下表格:

信息
  • 身份证
  • 头衔
  • 身体
  • 发送者身份证
  • 创造
  • 回应
  • 向用户发送的消息
  • 身份证
  • 消息id
  • 收件人id
  • Messages_Users表用于存储每个已发送邮件的收件人。 然后像这样创建相应的模型,并建立模型之间的关系

    消息模型 现在,我想在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的数据集

    但我得到的只是一个错误,即在where子句中找不到列
    recipient\u id

    如何指示find方法正确连接这些表?
    我认为链接这些模型就足够了,这样蛋糕魔术就可以解决剩下的问题了。

    简单的回答是你的联想是错误的。长文如下:

    首先,没有所谓的
    hasAndBelongsTo
    关联。关联名称为
    hasandbelongtomany
    。此外,您在
    消息模型中建立的关联是完全错误的,或者如果我可以这样说,您可能没有正确理解它们。因此,快速修复方法是删除
    hasMany
    MessageUser
    belongsTo
    用户
    和错误的
    hasandblongsto
    消息
    ,并向用户添加
    hasandblongstomany
    关联

    如果您想让
    消息hasandbelongomany User
    只需使用它即可。怎样。此外,HABTM在这里已经讨论过很多次了,所以我不打算详细介绍它


    不过,我想向您指出另一种可能的设置。现在我提出这个建议是因为我看到您也尝试使用了
    hasMany
    ,所以可以在连接模型中使用所谓的
    hasMany,但通常是在您希望在连接模型中存储额外数据时使用的(在您的例子中是MessageUser)。检查

    我刚刚读了你提供给HABTM协会的链接,现在我觉得很受启发!我真的很感激,谢谢!我现在的方法是设置关联:Message HABTM User。我按照cakephp链接中提供的方式重新编辑了数据库消息。现在我在想用户与消息的关联。在我看来,我认为用户有很多信息,所以我将在接下来的用户模型中实现这一点。问候
     <?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')
            );
    
    public function inbox(){
        $uid = $this->Auth->user('id');
        $messages = $this->Message->find('all', array(
                'conditions' => array(
                        'recipient_id' => $uid)
                )
                );