$this->WebDirectory->find('all', array('conditions' => array('verified' => 0),'joins' => array(
array(
'table' => 'seo_site_statuses',
'type' => 'left',
'alias' => 't1',
'conditions' => array('WebDirectory.id' => ' t1.web_directory_id', 't1.site_id =' . $id)))));
好吧,这是我能够弄清楚的转换后的查询...也许再举一个例子可以帮助其他人弄清楚如何做到这一点...
但是我最终使用了直接查询,因为上述发现需要太多内存和时间来进行上述答案中提到的递归。
function paginate($id, $recursive = null, $extra = array(), $limit = 50, $page = 1){
$page = ($page * $limit) - $limit;
if(!empty($extra)){
$OrderBy = "ORDER BY ";
foreach ($extra as $key => $value) {
$OrderBy .= $key . " " . $value;
}
}else{
$OrderBy = "ORDER BY t2.page_rank DESC";
}
return $this->query('SELECT * FROM `seo_web_directories` as t2
LEFT JOIN (SELECT * FROM `seo_site_statuses` WHERE site_id = ' . $id['Site.id'] . ') as t1
ON `t2`.id = t1.web_directory_id WHERE t2.`verified` = 0 ' . $OrderBy . ' LIMIT ' . $page . ', ' . $limit);
// return $this->WebDirectory->find('all', compact('conditions', 'joins', 'limit', 'page', 'recursive'));
}
function paginateCount($conditions = null, $recursive = 0, $extra = array())
{
return $this->WebDirectory->find('count', array('conditions' => array('verified' => 0)));
}