我使用 Cake 已经有一段时间了,今天在写一个简单的搜索 Behavior 时我第一次注意到一些奇怪的东西。我没有做任何复杂的事情,只是$Model->find()
在初始化$Model
为s 之后在不同的模型上使用 s ClassRegistry::init('Model')
。一切都很好,除了我有一个login
在其中一个表中命名的数据库字段。该字段的值与*****
我执行搜索的任何行一样返回!在 Controller 或 Model 中使用 s 时不会发生这种情况find()
,只是在 Behavior 中使用。下面是我的代码:
...
...
$Model = ClassRegistry::init('User');
$fields = array('User.login', 'User.name', 'RelatedModel.field1', 'RelatedModel.field2');
$contain = array('RelatedModel');
if($searchBy === "name") {
//some code and set $conditions
} else {
//else some other code and set $conditions
}
$Model->Behaviors->load('Containable');
$results = $Model->find('all', array('conditions' => $conditions, 'fields' => $fields, 'contain' => $contain));
return $results;
这debug()
就是显示的内容:
array(
(int) 0 => array(
'User' => array(
'login' => '*****',
'name' => 'John Doe',
'passwd' => 'a291a5c901cf51b75b6a50135ed5a04bc2e90c54',
),
'RelatedModel' => array(
'field1' => 'XXXXXXXX',
'field2' => '7002'
)
)
)
实际结果应该是'login' => 'nsps_2013'
,因为它绝对是当我find()
在UserController
and中使用时UserModel
。