【问题标题】:cakephp messaging system scheme/model/controller Best Practice?cakephp 消息系统方案/模型/控制器最佳实践?
【发布时间】:2012-04-09 21:43:28
【问题描述】:

我正在尝试为我的用户实现一个简单的消息传递系统。

我不是 habtm 专家,因此我们将不胜感激!

这是我到目前为止所得到的,请提出任何建议! (蛋糕1.3)

CREATE TABLE IF NOT EXISTS `app_messages` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `from_user_id` int(8) unsigned DEFAULT NULL,
  `title` varchar(255) DEFAULT NULL,
  `body` text,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `app_messages_users` (
  `id` int(8) unsigned NOT NULL,
  `message_id` int(8) unsigned NOT NULL,
  `to_user_id` int(8) unsigned NOT NULL,
  `read` tinyint(1) DEFAULT '0',
  `replied` tinyint(1) NOT NULL DEFAULT '0',
  `trash` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
);

Message.php
var $hasAndBelongsToMany = array(
        'User' =>
            array(
                'className'              => 'User',
                'joinTable'              => 'messages_users',
                'foreignKey'             => 'message_id',
                'associationForeignKey'  => 'to_user_id',
                'unique'                 => true
            )
    );


User.php
var $hasMany = array(        
        'Message' => array(            
            'className' => 'message',            
            'foreignKey' => 'from_user_id',
            'dependent'     => true       
        )

所以现在,我的问题是,我这样做对吗?

如何创建一个 SEND MESSAGE 函数,将正确的值插入两个表? 关于 HABTM 关系,我完全是个菜鸟,但我正在努力学习。花了几个小时在网上阅读它,但仍然需要询问我是否走对了。

感谢您的宝贵时间!! -汤姆

【问题讨论】:

  • 你可以看看我的“对话”sql表@groups.google.com/d/msg/cake-php/BlOQsyuFnEc/2YXduSde0mwJ。这通过对话将它们组合在一起来减少冗余。然后使用 3 个表。
  • 看了一下,实际上,我在摆弄一些说明/最佳方法时已经看过该讨论;)您如何在模型/控制器中进行发送时保存消息等等?

标签: mysql cakephp model controller has-and-belongs-to-many


【解决方案1】:

鉴于您的联接表有其他字段(readrepliedtrash),您不应使用 HABTM 关系。如果这样做,您将无法从您的应用程序中访问它们。因此,您应该通过连接表的新模型配置两个 hasMany 关联。很好解释here in the CookBook

所以你最终会得到这样的东西:

// User.php
class User extends AppModel {
    public $hasMany = array(
        'MessageUser' /* you can call this 'SentMessage' or something that makes more sense */
    );
}

// Message.php

class Message extends AppModel {
    public $hasMany = array(
        'MessageUser'
    );
}

// MessageUser.php

class MessageUser extends AppModel {
    public $belongsTo = array(
        'User', 'Message'
    );
}

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多