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

如果您不需要 Paginate,因为您只从 Db 获得一行条目,因此您似乎不需要 Paginate,那么您应该这样重写您$this->set()的:

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

如果您需要 Paginate (???),那么您需要将整个函数设置为:

$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 回答