0

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

留言

  1. ID
  2. 标题
  3. 身体
  4. 发件人ID
  5. 创建
  6. response_on

Messages_Users

  1. ID
  2. message_id
  3. 收件人 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 方法正确连接这些表?我认为连接模型就足够了,所以蛋糕魔法会处理剩下的事情。

4

1 回答 1

0

快速的回答是你的联想是错误的。长篇如下:

首先没有关联叫hasAndBelongsTo。协会名称为hasAndBelongsToMany。此外,你放在一起的联想Message Model是完全错误的,或者如果我可以这样说 - 你可能没有正确理解它们。因此,快速解决方法是删除hasManyto MessageUser、 thebelongsTo User和错误hasAndBelongsTo Message并添加hasAndBelongsToMany与 User 的关联。

如果您想Message hasAndBelongsToMany User使用它。如何在这里描述。此外,HABTM 已经在这里讨论过很多次,所以我不打算详细介绍它。

However I would like to point you to another possible set up. Now I am proposing this because I saw you tried to also use hasMany so there is the possibility to use the so-called hasManyThrough the Join Model, but usually that is to be used when you want to store additional data in the join model (MessageUser in your case). Check this question out.

于 2012-12-04T08:16:07.883 回答