在CakePhp中调用unbindModel。它是如何工作的?

时间:2009-10-19 06:28:21

标签: php cakephp

unbindModel是如何在蛋糕中发生的?

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend')));

我在函数的开头写了这个。但它仍在查询“朋友”模型。在函数中间调用了paginate()。所以我认为分页器可能会生成查询。

我在paginate之前添加了一个unbindModel调用,它现在可以正常工作。

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend')));
$user = $this->paginate("User", array("User.first_name LIKE" => $user["User"]["first_name"]));

unbindModel是否取消绑定每个查询?还是在整个函数调用期间解除绑定?

3 个答案:

答案 0 :(得分:12)

From the manual

  

使用bind-和unbindModel()删除或添加关联仅适用于下一个模型操作,除非第二个参数已设置为false。如果第二个参数已设置为false,则绑定将保留在请求的其余部分。

换句话说,在您paginate()find()之后或对模型执行任何其他操作后,取消绑定将被撤消。

答案 1 :(得分:4)

嗯,根据我对unbinds的经验,我可以说Paginate总是做2个查询,一个用于计算总数,第二个用于结果数组

unbind只破坏一次关系并且你需要延长这个规则来销毁两次或更多次因此你需要设置为TRUE我想要坚持这个规则:

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend')), true);

答案 2 :(得分:0)

试试这个:

$this->Leader->find('all');

// Let's remove the hasMany...
$this->Leader->unbindModel(
    array('hasMany' => array('Follower'))
);

// Now using a find function will return
// Leaders, with no Followers
$this->Leader->find('all');

// NOTE: unbindModel only affects the very next
// find function. An additional find call will use
// the configured association information.

// We've already used find('all') after unbindModel(),
// so this will fetch Leaders with associated
// Followers once again...
$this->Leader->find('all');