所以这就是我想要做的。 我的表说(课程)有多个具有相同ID的条目。
当我从paginate获取数据时,它会显示所有记录。因此,如果我有3个Id 5的记录,它将显示记录号5三次。
现在我想要的是它应该只显示一次记录。
我在网上搜索但找不到任何东西。
如果有人遇到此类问题并找到解决方案,请告诉我。
谢谢,
答案 0 :(得分:4)
我遇到了你的问题,因为我遇到了类似的问题。 David Z的解决方案对我不起作用,但我确实发现$ paginate中的组变量对我有效。
因此,使用上面的代码示例,我认为它应该如何工作。
$paginate = array(
'Courses' => array(
'limit' => 20,
'fields' => array('Courses.id'),
'conditions' => $cond,
'group' => array('Courses.id'),
'order' => array('Courses.id' => 'asc')
)
);
为了让我更多地了解对我有用的解决方案,我拥有属于公司的系统。我希望得到一份我所拥有的系统的独特公司列表。这是我使用的确切代码,对我有用
$this->paginate = array ('fields' => array ('Company.*'),
'order' => array('Company.name' => 'ASC'),
'group' => array('Company.id'));
$this->set('companies', $this->paginate($this->Company->System));
希望这有所帮助
答案 1 :(得分:1)
查看CakePHP cookbook,分页文档显示您可以覆盖$ paginate成员。在幕后,这类似于传递模型的查找参数('all')。也许尝试设置参数以使用distinct关键字显式返回您感兴趣的filds以缩小您需要的值?
class RecipesController extends AppController {
var $paginate = array(
'fields' => array('Model.field1', 'DISTINCT Model.field2')
);
}
答案 2 :(得分:0)
所以这是我的paginate变量的样子:
var $paginate = array(
'Courses' => array(
'limit' => 20,
'page' => 1,
'order' => array(
'Courses.id' => 'asc')
),
);
条件变量看起来像这样:
$cond = array("Courses.id LIKE "=>$this->data['id_search'],
"Courses.length LIKE "=>$this->data['length_search'],
"Courses.marks LIKE "=>$this->data['marks']
);
这就是我打电话给分页的方式。
$data = $this->paginate('CdmaRfReport',$cond);
我试过
$paginate = array(
'Courses' => array(
'limit' => 20,
'fields' => array('DISTINCT Courses.id'),
'page' => 1,
'conditions' => $cond,
'group' => array('id'),
'order' => array(
'Courses.id' => 'asc')
)
);
它似乎没有帮助。
我也试过
$cond = array("DISTINCT Courses.id "=>$this->data['id_search'],
"Courses.length LIKE "=>$this->data['length_search'],
"Courses.marks LIKE "=>$this->data['marks']
);
即便出错也是如此 我可能有点不对劲。但我无法弄明白。
任何建议请告诉我。