在CakePhp中取消绑定模型调用。它是如何工作的?

在CakePhp中取消绑定模型调用。它是如何工作的?,php,cakephp,Php,Cakephp,不绑定模型是如何在蛋糕中发生的 $this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend'))); 我在函数的开头写了这个。但它仍然质疑“朋友”模式。在函数的中间有一个调用PyInAuto()。所以我认为paginator可能正在生成查询 我确实在paginate之前添加了一个unbindModel调用,现在它可以工作了 $this->User->unbindModel(array(

不绑定模型是如何在蛋糕中发生的

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend')));
我在函数的开头写了这个。但它仍然质疑“朋友”模式。在函数的中间有一个调用PyInAuto()。所以我认为paginator可能正在生成查询

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

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend')));
$user = $this->paginate("User", array("User.first_name LIKE" => $user["User"]["first_name"]));
取消绑定模型是否取消绑定每个查询?还是在整个函数调用过程中解除绑定?

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


换句话说,在您
paginate()
find()
或对模型执行任何其他操作后,解除绑定将被反转。

根据我解除绑定的经验,我可以说paginate总是执行两个查询,一个用于计算总数,另一个用于计算结果数组

只需在关系中取消绑定销毁一次,是的,您需要扩展此规则以销毁两次或更多次,因此您需要设置为TRUE,我猜要坚持此规则:

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

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

在这种情况下,像这样解绑是一种好的做法吗
unset($this->User->hasandbelongtomany['Friend])
@RSK,它要么什么都不做,要么把事情搞得一团糟。我不想尝试任何一种方法。你能回答我的问题吗this@RSK不,因为我认为没有必要验证登录信息。登录正确与否,提供更多详细信息只会帮助潜在攻击者。我以前在某个地方写过这方面的内容,但现在找不到。对于未来的访问者来说,这不应该是公认的答案-
paginate()
函数在内部查询两次(正如darkcode在下面指出的,一次检索数据,一次检索计数)因此,如果在
unbindModel()
之后调用
paginate()
,而不将persist选项设置为
true
,则会得到非常奇怪的结果。