我遇到了一个奇怪的问题,在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调用。但是,目前尚不清楚这些来电的来源。
其他控制器和操作似乎工作正常,排除任何腐败问题。
之前有没有遇到过类似的情况?有什么指针吗?
答案 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' );