【问题标题】:Implement Message System into cakephp 2.x在 cakephp 2.x 中实现消息系统
【发布时间】:2012-11-21 14:09:45
【问题描述】:

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

消息

  1. 身份证
  2. 标题
  3. 身体
  4. sender_id
  5. 已创建
  6. response_on

Messages_Users

  1. 身份证
  2. message_id
  3. recipient_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进行join,并选择表messages_users的user_id等于receiver_id的数据集。

但我得到的只是一个错误,指出在 where 子句中找不到列 recipient_id。

如何指示 find 方法正确连接这些表? 我认为链接模型就足够了,所以蛋糕魔法会处理剩下的事情。

【问题讨论】:

    标签: join message foreign-key-relationship cakephp-2.1


    【解决方案1】:

    快速回答是您的关联是错误的。长的如下:

    首先没有称为hasAndBelongsTo 的关联。关联名称为hasAndBelongsToMany。此外,您在Message Model 中汇总的关联是完全错误的,或者如果我可以这样说 - 您可能没有正确理解它们。因此,快速解决方法是将hasMany 删除到MessageUser、belongsTo User 和错误的hasAndBelongsTo Message 并添加hasAndBelongsToMany 关联到用户。

    如果您想拥有Message hasAndBelongsToMany User,请使用它。如何is described here。此外,HABTM 在这里已经讨论过很多次了,所以我不打算详细讨论它。

    但是,我想向您指出另一种可能的设置。现在我提出这个建议是因为我看到你也尝试使用hasMany,所以有可能使用所谓的hasManyThrough the Join Model,但通常当你想在连接模型中存储额外数据时使用它( MessageUser 在您的情况下)。检查this question out。

    【讨论】:

    • 我刚刚阅读了您提供给 HABTM 协会的链接,我现在感到很受启发!我真的很感激——谢谢!我现在的方法是设置关联:Message HABTM User。我将数据库 messages_users 重新编辑为 cakephp 链接中提供的方式。现在我正在考虑用户与消息的关联。在我的脑海中,我想到了 User hasMany Messages - 所以接下来我将在用户模型中实现它。亲切的问候
    猜你喜欢
    • 2012-02-02
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多