如何显示嵌套关联值 cakephp 3
Posted
技术标签:
【中文标题】如何显示嵌套关联值 cakephp 3【英文标题】:how to show nested association value cakephp 3 【发布时间】:2017-10-11 10:57:03 【问题描述】:我想运行这段代码,它有嵌套的关联数据:
'VhpProducts.VhpHasilPencapaian',
'Departments.VhpHasilPencapaian',
'Groups.VhpHasilPencapaian' and to sum 'VhpHasilPencapaian.quantity'
但我得到的只是
错误:SQLSTATE[42S22]:未找到列:1054 “字段列表”中的未知列“VhpHasilPencapaian.amount”
$vhpCriteria = $this->VhpCriterias->find('all', [
'contain' => [
'VhpProducts.VhpHasilPencapaian',
'Departments.VhpHasilPencapaian',
'Groups.VhpHasilPencapaian'
],
'field' => ['VhpProducts.name']
]);
$vhpCriteria->select([
'product' => 'VhpProducts.name',
'amountTotal' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.amount'),
'qty' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.quantity'),
]);
【问题讨论】:
很可能VhpHasilPencapaian
和/或父关联不是 1:1/n:1,所以它不会出现在主查询中!?您应该提供有关关联的更多信息,以及您正在寻找的结果 SQL 查询。
@ndm 我有与 VhpProduct、部门和组关联(一对多)的 VhpCriterias 表。之后,我的 VhpHasilPencapaian 表也与 VhpProduct、部门和组相关联。所以我想显示来自 VhpHasilPencapaian 的数据并总结它们
【参考方案1】:
“嵌套”关联应该这样写:
$users = $this
->Users
->find('all')
->contain([
'Roles' => [
'Rights'
],
'Posts' => [
'Comments' => [
'Replies' => function($query)
return $query
->where(['public' => 1]);
]
]
])
->toArray();
【讨论】:
他们没有有,也支持点符号。【参考方案2】:您需要选择所有要使用的数据。您的字段应该是字段并包括您想要返回的所有字段。或者,您可以完全排除它以返回所有内容。如果您没有在 fields 选项中指定字段,则不会将其返回并且您无法使用它。
$vhpCriteria = $this->VhpCriterias->find('all', [
'contain' => [
'VhpProducts.VhpHasilPencapaian',
'Departments.VhpHasilPencapaian',
'Groups.VhpHasilPencapaian'
],
'fields' => ['VhpProducts.name', 'ALL OTHER FIELDS']
]);
$vhpCriteria->select([
'product' => 'VhpProducts.name',
'amountTotal' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.amount'),
'qty' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.quantity'),
]);
【讨论】:
这在 SQL 级别上并不重要,在 SQL 查询中,您可以引用表的任何列,无论它是否在SELECT
列表中,重要的部分是该表实际上包含在查询中。
@ndm 很好。我将不得不进行测试,但我仍然认为 Cakephp 会运行第一个查询,然后运行选择一个,结果几乎就像一个子选择,在这种情况下你需要正确选择它们?
CakePHP 确实在 hasMany
或 belongsToMany
关联的情况下运行多个查询,这是正确的,但它们并不相互依赖,除了额外的查询将被提供它们各自“父”查询的主键/绑定键,以及关联查询需要选择各自的外键,以便将结果拼接在一起。此问题中的SUM
函数位于主查询中,因此必须包含VhpHasilPencapaian
表。以上是关于如何显示嵌套关联值 cakephp 3的主要内容,如果未能解决你的问题,请参考以下文章