繁体   English   中英

Cakephp Multiple hasAndBelongsToMany HABTM

[英]Cakephp Multiple hasAndBelongsToMany HABTM

我有一张表Tasks_Users,其ID为task_id,user_id和sender_id。 问题是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'] []

从理论上讲,它应该同时保存这两者,但不幸的是,仅当您在“脚手架”控制器中使用添加操作保存时,才将Sender_id保存在TasksUser表中;而当您在“脚手架”中使用添加动作保存时,仅将User_id保存在TasksUser表中。

TasksUser表如下:

id  task_id   user_id   sender_id

我该怎么做,以便将user_id和sender_id都保存在同一行???

我的意思是它应该正常工作,无需任何其他纠正:如果您有一个通过HABTM与其他表相关联的表User,则在进行saveAll CakePhp时应自动更新Join表。 对我来说,它确实有效。

您必须将下面的代码放入控制器中,

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM