2017-10-11 50 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