CakePHP bindModel HABTM Сохранить - PullRequest
0 голосов
/ 09 апреля 2011

Я хочу создать привязку из одной модели к моей модели пользователя на лету, чтобы соединение не вызывалось каждый раз, когда я выполняю поиск по этой модели.Я использую привязку, чтобы выполнить сохранение HABTM.Однако, когда я использую функцию bindModel, данные HABTM не сохраняются в базе данных.

Что делает это странным, так это то, что если я перенесу свою привязку на модель User, сохранение будет работать отлично.Я не вижу никаких указаний в документации, что поведение сохранения было бы другим, когда в модели была установлена ​​связь с функцией bindModel (хотя, возможно, я пропустил ее, если она есть).

Здесьмой код bindModel в моем контроллере:

$this->User->bindModel(
        array(
            'hasAndBelongsToMany' => array(
                'Othermodel' => array(
                    'className'              => 'Othermodel',
                    'joinTable'              => 'othermodels_users',
                    'foreignKey'             => 'user_id',
                    'associationForeignKey'  => 'othermodel_id',
                    'unique'                 => true,
                    )
                )
            )
        );

if($res = $this->User->save($data)){
    return true;
}

И это моя модель пользователя.

class User extends AppModel {
    public $name = 'User';
    public $belongsTo = array();
    public $hasOne = array();
    public $hasMany = array();

    public $hasAndBelongsToMany = array(
    'Othermodel' => array(
        'className'              => 'Othermodel',
        'joinTable'              => 'othermodels_users',
        'foreignKey'             => 'user_id',
        'associationForeignKey'  => 'othermodel_id',
        'unique'                 => true
    )
    );

Опять же, у меня только активные отношения в одном месте одновременно, поэтому язнаю проблема не с самой привязкой.Кажется, проблема связана исключительно с тем, что я пытался использовать bindModel.Это предполагаемое поведение?

Ответы [ 3 ]

0 голосов
/ 14 апреля 2011

Судя по ответам в этой статье, похоже, что функция bindModel существует только для находок.

CakePHP: модель привязки не работает

Хотя в документации по CakePHP 1.3 нет информации, в которой говорится, что привязка предназначена только для находок, хотя это объясняет поведение ...

http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Models.html

Итак, я отмечаю это как ответ.

0 голосов
/ 17 февраля 2012

Попробуйте это,

$this->Message->bindModel(
            array(
              'belongsTo'=>array(
                'User'=>array(
                  'foreignKey'=>false,
                  'conditions'=>array('Npl.to=User.id '),
                  'fields'=>array('recive')
                ),
                'User_e'=>array(
                  'className'=>'User',
                  'foreignKey'=>false,
                  'alias'=>'User_e',
                  'conditions'=>array('Npl.from=User_e.id '),
                  'fields'=>array('recive')
                )
              )

            )
          );
0 голосов
/ 09 апреля 2011

Я не уверен, относится ли это к делу, но вы уверены, что не выполняете никаких других операций поиска между привязкой и сохранением.bindModel связывает модель только для следующей операции поиска, поэтому вам может потребоваться передать true до bindModel, чтобы сообщить ей о необходимости связывания.

Соответствующие ссылки: CakePHP: BindМодель не работает и http://groups.google.com/group/cake-php/browse_thread/thread/316c9796603eac57?pli=1.

Надеюсь, это поможет.

...