如何在 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']);
我想要这个查询。
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']);