CakePHP 3 中的内部联接 returns 无行
InnerJoin in CakePHP 3 returns no rows
我正在尝试学习 CakePHP 3,但我遇到了 运行 问题:
我有两个 tables languages 和 rich_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();
我正在尝试学习 CakePHP 3,但我遇到了 运行 问题:
我有两个 tables languages 和 rich_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();