Cakephp Multiple hasAndBelongsToMany HABTM - PullRequest
0 голосов
/ 10 октября 2011

У меня есть таблица Tasks_Users с id, task_id, user_id и sender_id. Проблема в том, что user_id и sender_id ссылаются на facebook_id в таблице Users, и я не уверен, как я могу связать их вместе с двумя внешними ключами. Есть ли способ получить два внешних ключа, определенных с помощью отношения 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, когда вы сохраняете, используя действие add в скаффолдинге для контроллера Tasks, и сохраняет только User_id в таблице TasksUser, когда вы сохраняете, используя действие add в скаффолдинге для контроллера Users.

Таблицы TasksUser приведены ниже:

id  task_id   user_id   sender_id

Как мне сделать так, чтобы он сохранял и user_id, и sender_id в одной строке ???

Ответы [ 2 ]

0 голосов
/ 22 февраля 2013

Это должно работать нормально, я имею в виду без каких-либо других исправлений: если у вас есть таблица User, которая через HABTM связана с другими таблицами, при создании saveAll CakePhp должен автоматически обновить таблицу Join.Для меня это работает.

0 голосов
/ 10 октября 2011

Вы должны ввести ниже код в вашем контроллере,

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

            'User2' => array(
            'className' => 'User',
            'foreignKey' => 'sender_id'),
                  )
               )
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...