CakePHP bindModel HABTM保存

时间:2011-04-08 22:01:06

标签: cakephp cakephp-1.3

我想在运行时从一个模型到我的User模型创建一个绑定,这样每次在该模型上执行查找时都不会调用JOIN。我正在使用绑定来执行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 :(得分:0)

我不确定这是否相关,但您确定在绑定和保存之间没有进行任何其他查找操作。 bindModel仅绑定模型以进行下一次查找操作,因此您可能需要将true传递给bindModel,以告知它保持绑定。

相关链接:CakePHP: Bind Model not workinghttp://groups.google.com/group/cake-php/browse_thread/thread/316c9796603eac57?pli=1

我希望这会有所帮助。

答案 1 :(得分:0)

根据本文中的响应,看起来bindModel函数仅适用于查找。

CakePHP: Bind Model not working

尽管CakePHP 1.3文档中没有任何信息表明绑定仅适用于查找,但这可以解释行为......

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

所以,我将此标记为已回答。

答案 2 :(得分:0)

试试这个,

$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')
                )
              )

            )
          );