私はかなり長い間 Cake を使用してきましたが、今日、単純な検索動作を書いているときに初めて奇妙なことに気付きました。として$Model->find()
初期化した後、異なるモデルで s を使用するだけで、複雑なことは何もしていません。テーブルの 1 つに名前が付けられたデータベース フィールドがあることを除いて、すべてがうまく機能します。このフィールドの値は、検索を実行した行と同じように返されます! これは、コントローラーまたはモデルで s を使用している間は発生せず、ビヘイビアーでのみ発生します。以下は私のコードです:$Model
ClassRegistry::init('Model')
login
*****
find()
...
...
$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'
)
)
)
実際の結果は、 andで使用した'login' => 'nsps_2013'
場合が最も確実であるためです。find()
UserController
UserModel