Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp多个hasAndBelongsToMany HABTM_Php_Cakephp - Fatal编程技术网

Cakephp多个hasAndBelongsToMany HABTM

Cakephp多个hasAndBelongsToMany HABTM,php,cakephp,Php,Cakephp,我有一个表Tasks\u Users,id为,task\u id,user\u id和sender\u id。问题是user\u id和sender\u id都是指Users表中的facebook\u id,我不确定如何用两个外键将它们连接在一起。 有没有一种方法可以从一列中获得两个用HABTM关系定义的外键 更新:下面是我目前在任务模型中设置的内容 var $hasAndBelongsToMany = array( 'User' => array(

我有一个表Tasks\u Users,id为,task\u id,user\u id和sender\u id。问题是user\u id和sender\u id都是指Users表中的facebook\u 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' => ''
        )
    );
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' => ''
        )
    );
下面是TasksUser模型

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' => ''
        )
    );
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' => ''
        )
    );
我设法获得了两个多选择框,一个用于用户id,另一个用于发件人id,但问题是我无法同时为同一行保存这两个框

数据数组如下所示:$this->data['User']['User'][]和$this->data['Sender']['Sender'][]

理论上,它应该同时保存这两个,但不幸的是,当您在任务控制器的脚手架中使用添加操作进行保存时,它只在TasksUser表中保存发送者id,而当您在用户控制器的脚手架中使用添加操作进行保存时,它只在TasksUser表中保存用户id

TasksUser表如下所示:

id  task_id   user_id   sender_id

如何使其在同一行同时保存用户id和发件人id???

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

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

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

它应该正常工作,我的意思是没有任何其他修正:
如果您有一个通过HABTM与其他表关联的表用户,那么在进行saveAll操作时,CakePhp应该自动更新联接表。对我来说,它确实有效。

这是为哪个控制器设计的?在任务中的操作中查找查询之前,请输入以上代码。\u Users\u controllerI我在上面尝试过,我也尝试过:$this->TasksUser->bindModel(array('belongsTo'=>array('User'=>array('className'=>'User',foreignKey'=>'User\u id')),'Sender'=>数组('className'=>'User','foreignKey'=>'Sender_id'),);但它不起作用…我得到一个表作为多个选择框,它是userid,但我不能得到senderid的多个选择框