我想在运行时从一个模型到我的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这一事实有关。这是预期的行为吗?
答案 0 :(得分:0)
我不确定这是否相关,但您确定在绑定和保存之间没有进行任何其他查找操作。 bindModel
仅绑定模型以进行下一次查找操作,因此您可能需要将true
传递给bindModel
,以告知它保持绑定。
相关链接:CakePHP: Bind Model not working和http://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')
)
)
)
);