【问题标题】:Cakephp pagination with joined tables带有连接表的 Cakephp 分页
【发布时间】:2013-02-08 15:21:15
【问题描述】:

我想将“部门”表加入我的分页结果。这是发生了什么:

我设置了分页变量,以便它加入扇区:

$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');

分页器生成的查询已损坏,因为它在 Company 之前加入了 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') 

我对 Job 模型进行了分页,它与 Company 模型相关,但与 Sector 模型无关。这就是为什么我需要通过分页加入 Sector。

我该如何解决这个问题?

【问题讨论】:

  • 尝试将$conditions 放在外部数组的首位。
  • @DIDIERC 如果没有“joins”中指定的“conditions”,我将无法加入此表。
  • 让我改写一下:尝试在外部数组中将"conditions" => $conditions 放在"joins" => ... 之前。请注意,这只是一个猜测,我不知道这是否是您的问题的根源,但尝试的成本并不高。
  • @didierc 没用,抱歉

标签: sql cakephp pagination


【解决方案1】:

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

所以,替换这个:

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

有了这个

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

你的查询应该没问题

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多