Cakephp3无法识别深度关联中具有不同名称的表
我创建了一个名为Delegates的表,并创建了一个UsersTable和User实体。我使用了$this->可设置的“委托”;在UsersTable中,可以从$this->Users访问代理;我只想说我已经创建了一个带有委托表的用户模型 到目前为止还不错 在我的应用程序中,我试图访问深层关联。这个查询一切正常,但是当我包含用户模型时,我得到的用户关联并没有在注释中定义 我可以确认关联设置正确Cakephp3无法识别深度关联中具有不同名称的表,cakephp,cakephp-3.7,Cakephp,Cakephp 3.7,我创建了一个名为Delegates的表,并创建了一个UsersTable和User实体。我使用了$this->可设置的“委托”;在UsersTable中,可以从$this->Users访问代理;我只想说我已经创建了一个带有委托表的用户模型 到目前为止还不错 在我的应用程序中,我试图访问深层关联。这个查询一切正常,但是当我包含用户模型时,我得到的用户关联并没有在注释中定义 我可以确认关联设置正确 ... // There are more associations up there. ... '
...
// 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注:
如果我将用户模型包含在查询层次结构的第一个层次中,那么
可以访问用户字段,但在深度关联中,则无法访问
工作
如果我包含委托,它就可以工作。
我相信Cakephp查询生成器有问题。好的,我终于解决了。我以前做过,不知道为什么忘了。可能是因为我有着深厚的感情,所以我开始沉迷其中 深层关联包含正在与第一个包含产生冲突。如果我在深度关联中设置不同的propertyName,那么它就达到了目的 请记住,必须在表格模型上设置此关联 结社
'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' // <= Remove this - We have already done it when we set the association on above code.
])
->enableAutoFields();
}
])
->enableAutoFields();
}
您的第一个代码块,您定义注释关联的地方,它在哪里?因为它看起来像是在另一个关联中定义用户关联,这根本不是它的工作方式。相反,用户与注释的关联必须发生在注释模型内部,这样,与注释关联的任何内容都可以达到下一个级别,而不必为与注释关联的每个模型重新定义它。希望这是清楚的。@GregSchmidt谢谢你,但这只是为了让读者了解我的表格模型的结构。正如我提到的,我有两个表,用户和代理。我想使用代理作为用户。所有关联都已在表模型中设置。请把问题再读一遍。我认为深度ORM关联存在问题。包括我在内的许多人每天都在使用深度关联。所以我相信你的代码有问题。如果您向我们展示更多的初始化函数,我们可能会给出更具体的建议。
'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' // <= Remove this - We have already done it when we set the association on above code.
])
->enableAutoFields();
}
])
->enableAutoFields();
}