CakePHP:视图与控制器不同步

时间:2013-02-07 16:27:04

标签: cakephp

我遇到了一个奇怪的问题,在Controller中从表传递单个记录,但View最终显示整个表。

我有大量的日志记录,我很确定,Controller正在通过$ 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调用。但是,目前尚不清楚这些来电的来源。

其他控制器和操作似乎工作正常,排除任何腐败问题。

之前有没有遇到过类似的情况?有什么指针吗?

2 个答案:

答案 0 :(得分:2)

您将paginate()函数的输出传递给您的视图,这与您自己的find()调用不同。

如果您想要与find()相同的条件。将它们传递给paginate()(提示:先将条件放入数组中)

答案 1 :(得分:1)

如果您不需要Paginate,因为您似乎没有,因为您只从Db获得一行条目,那么您应该重写$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' );