2017-10-11 110 views
1

我要运行这段代码,它嵌套了关联数据:如何显示嵌套组合值的CakePHP 3

'VhpProducts.VhpHasilPencapaian', 
'Departments.VhpHasilPencapaian', 
'Groups.VhpHasilPencapaian' and to sum 'VhpHasilPencapaian.quantity' 

但我得到的是

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'VhpHasilPencapaian.amount' in 'field list'

$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'), 
]); 
+0

最有可能'VhpHasilPencapaian'和/或父关联不是1:1/n:1,所以它不会在主查询中结束!?您应该提供关于关联的更多信息以及您正在查找的结果SQL查询。 – ndm

+0

@ndm我有VhpCriterias表与VhpProduct,部门和组具有关联(一对多)。在那之后,我有VhpHasilPencapaian表,它也与VhpProduct,Departments和Groups有关联。所以我想显示VhpHasilPencapaian的数据,并总结他们 –

回答

0

“嵌套”协会应该这样写:

$users = $this 
     ->Users 
     ->find('all') 
     ->contain([ 
      'Roles' => [ 
       'Rights' 
      ], 
      'Posts' => [ 
       'Comments' => [ 
        'Replies' => function($query) { 
         return $query 
          ->where(['public' => 1]); 
        } 
       ] 
      ] 
     ]) 
    ->toArray(); 
+0

他们不_have_,也支持点符号。 – ndm

0

您需要选择您要使用的所有数据。你的领域应该是领域,并包括你想要返回的所有领域。或者,您可以完全排除它以返回所有内容。如果您没有在字段中指定的字段选项,您将不会返回并且无法使用它。

$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'), 
]); 
+1

尽管在SQL级别上并不重要,但在SQL查询中,您可以引用表中的任何列,而不管它是否在'SELECT'列表中,重要的部分是该表实际上包含在查询。 – ndm

+0

@ndm很好。我将不得不测试,但我仍然认为CakePHP会运行第一个查询,然后运行选择的结果几乎就像一个子选择,在这种情况下,你会需要它们被选择正确吗? – KaffineAddict

+1

CakePHP确实在'hasMany'或'belongsToMany'关联的情况下运行了多个查询,这是正确的,但它们并不相互依赖,除了额外的查询将使用它们各自的主键/绑定键“父”查询,并且关联的查询需要选择相应的外键,以便可以将结果拼接在一起。这个问题中的SUM函数在主查询中,所以这就是必须包含'VhpHasilPencapaian'表的地方。 – ndm