Cakephp与连接表分页

时间:2013-02-22 21:53:24

标签: sql cakephp pagination

我想将“sector”表加入到我的分页结果中。以下是发生的事情:

我设置了paginate变量,以便它将加入Sector:

$this->paginate = array(
        'joins' => array(
            array(
            'table' => 'sectors',
            'alias' => 'Sector',
            'type' => 'left',
            'foreignKey' => false,
            'conditions' => array('Company.sector_id = Sector.id'))),
        'conditions' => $conditions);

然后去

$jobs = $this->paginate('Job');

分页器生成的查询已损坏,因为它在公司之前加入了Sector。 这是sql输出的一部分:

SELECT COUNT(*) AS `count` FROM `jobs` AS `Job` left JOIN sectors AS `Sector` ON (`Company`.`sector_id` = 'Sector.id') LEFT JOIN `companies` AS `Company` ON (`Job`.`company_id` = `Company`.`id`)   

应该是:

SELECT COUNT(*) AS `count` FROM `jobs` AS `Job` LEFT JOIN `companies` AS `Company` ON (`Job`.`company_id` = `Company`.`id`) left JOIN sectors AS `Sector` ON (`Company`.`sector_id` = 'Sector.id') 

我对作业模型进行了分页,它与公司模型有关,但与扇区模型无关。这就是为什么我需要加入该部门的分页。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

CakePHP中的

'Joins'条件不应该被指定为关联数组,而应该被指定为字符串,否则CakePHP将把'Sector.id'作为文字字符串处理,而不是作为对另一个模型的引用/字段。

所以,替换这个:

'conditions' => array('Company.sector_id' => 'Sector.id')

有了这个

'conditions' => array('Company.sector_id = Sector.id')

你的查询应该没问题

答案 1 :(得分:0)

我的解决方案是将Job模型加入Sector。