【发布时间】:2018-12-31 02:09:26
【问题描述】:
我创建了一个名为Delegates 的表,并创建了一个用户表和用户实体。而且我在UsersTable 中使用了$this->setTable('delegates');,以便能够从$this->Users; 访问代表(我只想说我已经创建了一个带有代表表的用户模型)
到目前为止一切都很好......
在我的应用程序中,我试图访问深层关联。这个查询一切都很好,但是当我 contain User 模型时,我得到 The Users association is not defined on Comments.
我可以确认关联设置正确。
...
// There are more associations up there.
...
'Comments', [
'className' => 'App\Model\Table\CommentsTable',
'foreignKey' => 'delegate_assessment_criteria_id',
'belongsTo' => [
'Assessors' => [
'className' => 'App\Model\Table\AssessorsTable',
'foreignKey' => 'assessor_id',
],
'Users' => [
'className' => 'App\Model\Table\UsersTable',
'foreignKey' => 'delegate_id',
]
]
]
这是深度关联。
...
// There are more associations up there.
...
'Comments' => function($q) {
return $q
->select([
'id'
])
->order(['Comments.created DESC'])
->contain([
'Assessors' => function($q) {
return $q
->select([
'id'
])
->enableAutoFields();
}
])
->contain([
'Users' => function($q) {
return $q
->select([
'id',
'delegate_id'
])
->enableAutoFields();
}
])
->enableAutoFields();
}
2 注意事项:
- 如果我在查询层次结构的最前面包含
User模型,我 可以访问User字段,但在深度关联中,这不会 工作。 - 如果我包含
Delegates,它会起作用。
我认为 Cakephp 查询生成器有问题。
【问题讨论】:
-
你的第一个代码块,你定义Comments关联的地方,这是哪里?因为看起来您正在尝试在另一个关联中定义用户关联,这根本不是它的工作方式。相反,用户与评论的关联必须发生在评论模型中,以便与评论相关联的 任何东西 获得下一个级别,并且您不必为每个模型重新定义它与评论相关联。希望这很清楚。
-
@GregSchmidt 谢谢,但这只是为了让读者了解我的表模型的结构。正如我提到的,我有 2 张桌子
Users和Delegates。我想将delegates用作Users。所有关联均已在 (Table Models) 中设置。请再次阅读问题。我认为深层 ORM 关联存在问题。 -
很多人,包括我自己,每天都在使用深度联想。所以我相信你的代码有问题。如果您向我们展示更多您的初始化函数,我们或许可以提供更具体的建议。
标签: cakephp cakephp-3.7