【问题标题】:CakePHP bindModel HABTM SaveCakePHP bindModel HABTM 保存
【发布时间】:2011-04-08 22:01:06
【问题描述】:

我想动态创建从一个模型到我的用户模型的绑定,以便每次在该模型上执行查找时都不会调用 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 的事实有关。这是预期的行为吗?

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

    根据本文中的回复,bindModel 函数似乎仅用于查找。

    CakePHP: Bind Model not working

    虽然 CakePHP 1.3 文档中没有说明绑定仅用于查找的信息,但这可以解释行为...

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

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

    【讨论】:

      【解决方案2】:

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

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

      我希望这会有所帮助。

      【讨论】:

      • 感谢您的建议,但没有奏效。而且我确信保存是我在模型绑定后尝试的唯一操作。我的代码与上面显示的完全一样。我已经尝试了一些其他测试,以确保 Cake 正在通过调试功能创建此关联,而不是构建动态关联,并且再次,一切看起来都很好,但保存没有发生。一旦我注释掉控制器中的绑定并移至模型,它就会完美运行。奇怪。
      【解决方案3】:

      试试这个,

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 2013-09-24
        • 1970-01-01
        • 2012-08-08
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多