0

コントローラーでテーブルから単一のレコードを渡しているのに、ビューがテーブル全体を表示するという奇妙な問題が発生しました。

私は広範なログを記録しており、コントローラーが $this->set() を介して単一のレコードを渡していることを確信しています。

コントローラー (ContactsController : show_list)

$arr_contacts = $this->Contact->find(
    'all', 
    array(
        'conditions' => array(
            'Contact.state_id' => $i_state_id, 
            'Contact.city'=> $str_city
        ),
        'fields' => array(
            'Contact.id', 
            'Contact.name',  
            'Contact.city'
        ),
        'recursive' => -1
    )
);

$contacts = $arr_contacts;
$this->log ($contacts, 'debug');
$this->set('contacts', $this->paginate());
$this->log(__FUNCTION__." : ".__LINE__, 'debug' );

ログに出力:

 Debug: Array
(
    [0] => Array
        (
            [Contact] => Array
                (
                    [id] => 504
                    [name] => Michael
                    [city] => New York
                )

        )

)


Debug: show_list : 303

ビューファイル (show_list.ctp)には、

 <div class="contacts index">

   <?php echo print_r($contacts);?> 

ビュー ファイルは、テーブルのすべてのレコードのリストを出力します。Cakephp が表示する SQL ダンプは、追加の SQL 呼び出しが行われていることを示しています。ただし、これらの電話がどこから来ているのかは明らかではありません。

残りのコントローラーとアクションは正常に機能しているようで、破損の問題は除外されています。

誰かが以前に同様の状況に遭遇したことがありますか? ポインタはありますか?

4

2 に答える 2

2

paginate() 関数の出力をビューに渡します。これは、独自の find() 呼び出しとは異なります。

find() と同じ条件が必要な場合。それらを paginate() に渡します (ヒント: 最初に条件を配列に入れます)

于 2013-02-07T16:35:18.740 に答える
1

Dbから1行のエントリしか取得していないため、Paginateが必要ないように見える場合は、次のように書き換える必要があります$this->set()

$this->set('contacts',$contacts);

ページネーション (???) が必要な場合は、関数全体を次のように設定する必要があります。

$this->paginate = array(
    'conditions' => array(
        'Contact.state_id' => $i_state_id, 
        'Contact.city'=> $str_city
    ),
    'fields' => array(
        'Contact.id', 
        'Contact.name',  
        'Contact.city'
    ),
    'recursive' => -1
);

$this->log ($this->paginate, 'debug');
$this->set('contacts', $this->paginate());
$this->log(__FUNCTION__." : ".__LINE__, 'debug' );
于 2013-02-08T04:52:39.863 に答える