0

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

4

1 に答える 1

2

いいえ、そうではありません。Debugger クラスは自動的に出力をサニタイズし、多数の異なる配列キーの内容をアスタリスクに置き換えます。完全なリストはソースにあります。

于 2013-09-24T20:51:44.787 に答える