如何在 Cakephp 3.x 中编写延迟连接?

How to write deferred join in Cakephp 3.x?

我想要这个查询。

SELECT Films.id AS `Films__id`, Films.name AS `Films__name` 
FROM films Films 
INNER JOIN (SELECT id FROM films ORDER BY released DESC LIMIT 10 OFFSET 100) AS Films2 ON Films.id = Films2.id 
ORDER BY Films.released DESC

这是我目前尝试过的方法。

    $subquery = $this->find()->select(['id']);
    $query = $this->find()
        ->innerJoin(['Films2' => $subquery], ['Films.id = Films2.id'])
        ->order(['released' => 'DESC']);

这会产生以下查询,该查询由于子查询中的 Films 别名而出错。我不知道如何更改该别名。

SELECT Films.id AS `Films__id`, Films.name AS `Films__name` 
FROM films Films 
INNER JOIN (SELECT Films.id AS `Films__id` FROM films Films) Films2 ON Films.id = Films2.id 
ORDER BY Films.released DESC

您只需为子查询中的 returned 列设置别名。由于您的条件是 Films.id = Films2.id,因此您需要 return 在子查询中别名为 id 的列。是这样的:

$subquery = $this->find()->select(['id' => 'id']); // Avoid automatic aliasing
$query = $this->find()
    ->innerJoin(['Films2' => $subquery], ['Films.id = Films2.id'])
    ->order(['released' => 'DESC']);