0

CakePHP アプリケーションのカスタム ページネーション ルールを実行しています。Cake のページネーションによって作成されたクエリは結果を返しませんが、そうすべきだと思います。

表は次のとおりです。

projects ('id', 'project_leader_id'), 
users ('id', 'name'),
users_projects ('id', 'project_id', 'user_id')

projects many-many users_projects on project_id,
users many-many users_projects on user_id,
users one-many projects on project_leader_id

サンプルデータ:

プロジェクト:

id (1), project_leader_id (1) 
id (2), project_leader_id (2)
id (3), project_leader_id (3)

ユーザー:

id (1), name ("Peter")
id (2), name ("Joe")
id (3), name ("Mark")

ユーザー_プロジェクト:

id (1), project_id (1), user_id (2)
id (2), project_id (1), user_id (3)
id (3), project_id (2), user_id (1)
id (4), project_id (2), user_id (2)
id (5), project_id (3), user_id (3)
id (6), project_id (3), user_id (1)

私のクエリ:

SELECT Project.id, User.name
FROM projects AS Project
LEFT JOIN users_projects AS Assignment
    ON Project.id = Assignment.project_id
LEFT JOIN users AS User
    ON User.id = Assignment.user_id
WHERE Project.project_leader_id = 1
    OR Assignment.user_id = 1

3 つの結果が返されるはずですが、結果は返されません。

ページネーションの構造は次のとおりです。

$this->paginate = array(
'Project' => array(
    'joins' => array(
        array(
            'table' => 'users_projects', 
            'alias' => 'Assignment',
            'type' => 'LEFT',
            'conditions' => array(
                'Assignment.project_id' => 'Project.id',
            )
        )
    ),
    'conditions' => array(
        'OR' => array(
            'Assignment.user_id' => $this->Auth->User('id'),
            'Project.project_leader_id' => $this->Auth->User('id')
        )
    )
));

アップデート

クエリはProject.project_leader_id、WHERE 条件で指定されたものを含むプロジェクトのみを返し、条件は考慮されませんAssignment.user_id

4

1 に答える 1

0

問題が何であるかがわかりました。「結合」キーの下のページネーション変数の「条件」句は、二重矢印なしで構築する必要があります。

変化

'conditions' => array('Assignment.project_id' => 'Project.id')

'conditions' => array('Assignment.project_id = Project.id')

問題を解決しました。

最初のクエリは次のようになります。

LEFT JOIN `consultants_assignments` AS `consultantsAssignment` ON
(`consultantsAssignment`.`project_id` = `Project.id`) 

そして変更後:

LEFT JOIN `consultants_assignments` AS `consultantsAssignment` ON
(`consultantsAssignment`.`project_id` = `Project`.`id`) 
于 2012-09-18T15:23:30.847 に答える