Cakephp Multiple hasAndBelongsToMany HABTM

时间:2011-10-10 09:21:05

标签: php cakephp

我有一个带有id,task_id,user_id和sender_id的表Tasks_Users。问题是user_id和sender_id都引用了Users表中的facebook_id,我不知道如何用两个外键将它们连接在一起。 有没有办法可以从一列中获得两个用HABTM关系定义的外键?

更新:以下是我目前在任务模型中设置的内容。

var $hasAndBelongsToMany = array(
        'User' => array(
            'className' => 'User',
            'joinTable' => 'tasks_users',
            'foreignKey' => 'task_id',
            'associationForeignKey' => 'user_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        ),
        'Sender' => array(
            'className' => 'User',
            'joinTable' => 'tasks_users',
            'foreignKey' => 'task_id',
            'associationForeignKey' => 'sender_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

以下是用户模型

var $hasAndBelongsToMany = array(
        'Task' => array(
            'className' => 'Task',
            'joinTable' => 'tasks_users',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'task_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

以下是TasksUser模型

var $belongsTo = array(
        'Task' => array(
            'className' => 'Task',
            'foreignKey' => 'task_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Sender' => array(
            'className' => 'User',
            'foreignKey' => 'sender_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

我设法得到两个多选框,一个用于User_id,另一个用于Sender_id,但问题是我无法同时为同一行保存两个...

数据阵列就像这样$ this-> data ['User'] ['User'] []和$ this-> data ['Sender'] ['Sender'] []

理论上它应该保存两者,但不幸的是,当你在脚手架中为任务控制器保存使用添加操作时,它只保存在TasksUser表中的Sender_id,并且当你在用户控制器的脚手架中使用添加操作保存时,只保存在TasksUser表中的User_id。 / p>

TasksUser表如下:

id  task_id   user_id   sender_id

我怎样才能这样做,它将user_id和sender_id保存在同一行???

2 个答案:

答案 0 :(得分:0)

您必须在控制器中输入以下代码,

 $this->TaskUser->bindModel(
            array('belongsTo' => array(
            'User1' => array(
            'className' => 'User',
            'foreignKey' => 'user_id'),

            'User2' => array(
            'className' => 'User',
            'foreignKey' => 'sender_id'),
                  )
               )
            );

答案 1 :(得分:0)

它应该正常工作,我的意思是没有任何其他更正: 如果你有一个表通过HABTM与其他表相关联的用户,当你进行saveAll时,CakePhp会自动更新Join表。对我来说它确实有用。