0

「セクター」テーブルをページネーションの結果に結合したいと考えています。何が起こるかは次のとおりです。

セクターに参加するように paginate 変数を設定します。

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

Paginator によって生成されたクエリは、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 モデルには関連していません。そのため、ページネーションを使用してセクターに参加する必要があります。

どうすればこれを修正できますか?

4

2 に答える 2

0

私の解決策は、ジョブモデルをセクターに参加させることです。

于 2013-02-24T15:00:25.840 に答える
0

CakePHP の「結合」条件は、連想配列ではなく文字列として指定する必要があります。そうしないと、CakePHP は「Sector.id」を別のモデル/フィールドへの参照としてではなく、リテラル文字列として処理します。

したがって、これを置き換えます:

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

これとともに

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

そして、あなたのクエリは問題ないはずです

于 2013-02-22T23:30:09.470 に答える