2014-08-29 25 views
1

我想創建一個簡單的查詢來獲取一個查詢中的所有相關實體(請參閱Doctrine - Get entity and relationships in one query)。對於一些原因學說遇到錯誤:左連接遇到「調用成員函數add()在PersistentCollection中的非對象」

Call to a member function add() on a non-object in PersistentCollection

完整堆棧跟蹤:

Error: Call to a member function add() on a non-object in \vendor\doctrine\orm\lib\Doctrine\ORM\PersistentCollection.php line 177 
    at n/a 
     in \vendor\doctrine\orm\lib\Doctrine\ORM\PersistentCollection.php line 177 
    at Doctrine\ORM\PersistentCollection->hydrateAdd() 
     in \vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php line 456 
    at Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateRowData() 
     in \vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php line 179 
    at Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateAllData() 
     in \vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\AbstractHydrator.php line 140 
    at Doctrine\ORM\Internal\Hydration\AbstractHydrator->hydrateAll() 
     in \vendor\doctrine\orm\lib\Doctrine\ORM\AbstractQuery.php line 804 
    at Doctrine\ORM\AbstractQuery->execute() 
     in \vendor\doctrine\orm\lib\Doctrine\ORM\AbstractQuery.php line 574 
    at Doctrine\ORM\AbstractQuery->getResult() 

組映射:

Group: 
    type: entity 
    table: groups 
    id: 
    id: 
     type: integer 
     generator: 
     strategy: AUTO 
    oneToMany: 
    influences: 
     targetEntity: Influence 
     mappedBy: group 
     cascade: [ "persist" ] 

影響映射:

Influence: 
    type: entity 
    table: influences 
    id: 
    organisation: 
     associationKey: true 
    group: 
     associationKey: true 

    fields: 
    influence: 
     type: integer 

    manyToOne: 
    organisation: 
     targetEntity: Organisation 
     inversedBy: influences 
    group: 
     targetEntity: Group 
     inversedBy: influences 

這裏是我的查詢生成器邏輯:

$builder->select('g, i') 
->from('Group', 'g') 
->join('g.game', 'game') 
->leftJoin('g.influences', 'i', Join::WITH, 'i.organisation = :org') 
->setParameter('org', $organisation) 
->orderBy('g.name') 
->getQuery(); 

感謝您的任何提示。

+0

不知道錯誤消息,但是您在連接的對象上使用了where子句,因此您將無法獲得任何沒有影響的組。你的問題有點不清楚,因爲看起來你的查詢有效?那麼在哪裏添加被稱爲? – Cerad 2014-08-29 16:45:15

+0

我已經添加了堆棧跟蹤,查詢本身工作部分如果我回聲SQL並手動運行它。影響使用了包含組織標識和組標識的組合主鍵。我應該如何通過組織對象? – CSchulz 2014-08-29 16:53:49

+0

好的感謝與WHERE子句的提示,我找到了正確的「星座」來生成查詢,但錯誤仍然存​​在。 – CSchulz 2014-08-29 17:27:35

回答

4

這個問題的原因一般來說很容易。

我已經創建了不同的實體類,並在某些點添加了默認值,如空數組到類字段。
這導致上述錯誤。

我已經做了測試我的本地業務邏輯,沒有任何數據庫連接或與Behat類似。

刪除空array()解決了我的問題。

爲了與Behat兼容我需要一個setter來爲字段再次設置一個空數組或者擴展這個類並且添加一個構造函數來默認這個字段。
也許別人對此有另一個想法。

+0

是的,先生!你救了我的一天! – 2015-03-07 19:13:33

+0

大概救了我一個下午的調試。謝謝! – 2015-06-30 14:52:28

相關問題