CakePHP 3 中的内部联接 returns 无行

InnerJoin in CakePHP 3 returns no rows

我正在尝试学习 CakePHP 3,但我遇到了 运行 问题:

我有两个 tables languagesrich_text_elements,想在下面加入他们方式:

$all = $this->find()->
select(['i18n','Language.long_name'])->
innerJoin(['Language' => 'languages'], ['Language.i18n' => 'RichTextElements.i18n'])->
group('RichTextElements.i18n')->
order(['RichTextElements.i18n'])->all();

生成以下查询:

SELECT RichTextElements.i18n AS `RichTextElements__i18n`, 
Language.long_name AS `Language__long_name` 
FROM rich_text_elements RichTextElements 
INNER JOIN languages Language ON Language.i18n = :c0 
GROUP BY RichTextElements.i18n  ORDER BY RichTextElements.i18n;

如果我用 "RichTextElements.i18n" 替换“:c0”,这个查询 运行 单独(在 HeidiSql 中)就很好,return 有五行数据,完全符合我的预期到。

但是 CakePHP return 是一个空集!

问题似乎与 innerJoin() 有关,因为如果我仅从 RichTextElements table 将查询修改为 select,它将return CakePHP 中预期的五行:

运行良好:

$all = $this->find()->
select(['i18n'])->
group('RichTextElements.i18n')->
order(['RichTextElements.i18n'])->all();

有人看到我没看到的东西吗?

如 API 中所述:

Conditions can be expressed [...] using a string for comparing columns, or string with already quoted literal values. Additionally it is possible to use conditions expressed in arrays or expression objects.

摘自 Query::join() | Using conditions and types.

尝试以下操作:

$all = $this->find()
    ->select(['i18n','Language.long_name'])
    ->innerJoin(
        ['Language' => 'languages'],
        ['Language.i18n' => new \Cake\Database\Expression\IdentifierExpression('RichTextElements.i18n')])
    ->group('RichTextElements.i18n')
    ->order(['RichTextElements.i18n'])->all();

这也应该有效:

$all = $this->find()
    ->select(['i18n','Language.long_name'])
    ->innerJoin(
        ['Language' => 'languages'],
        ['Language.i18n = RichTextElements.i18n'])
    ->group('RichTextElements.i18n')
    ->order(['RichTextElements.i18n'])->all();