2012-04-12 10 views
1

Ich versuche, die Position der Entitätssammlung (Unterobjekte) für eine bestimmte Entität (Master-Entität) zu aktualisieren . Alles funktioniert, bis die Methode eine Flush-Anweisung ausführt, um Aktualisierungen in die Datenbank zu übertragen.Symfony 2: Fehler bei EntityManager :: Flush mit Nachricht "ArrayCollection :: __ construct() muss ein Array sein, Objekt gegeben"

Fehlermeldung ist:

Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be an array, object given, called in \vendor\doctrine\lib\Doctrine\ORM\UnitOfWork.php on line 426 and defined in \vendor\doctrine-common\lib\Doctrine\Common\Collections\ArrayCollection.php line 46  

Controller-Methode ist:

public function layoutAction($id, $entity, $subentity) 
{ 
    //-- Get Repository for master entity class 
    $object = $this->getRepository($entity)->find($id); 
    $em = $this->getDoctrine()->getEntityManager();  

    //-- Get form datas 
    $datas = $this->get('request')->get('items', array()); 

    //-- Update position for each msater entity childs of given subentity 
    $method = "get" . ucfirst($subentity) . "s";   
    foreach($object->$method() as $item){ 
     $item->setPosition(array_search($item->getId(), $datas)); 
     $em->persist($item);    
    } 

    //-- Push updates 
    $em->flush(); 

    //-- Notification + Redirection 
    ... 
} 

Master-Einheit hat eine Eins-zu-viele-Beziehung mit Sub-Entität und Sub-Entität hat eine Eins-zu-Eins-Beziehung mit Master-Einheit. Beispiel Erklärung unten:

Master-Einheit:

<one-to-many field="subentities" target-entity="Subentity" mapped-by="masterentity" /> 

Sub-Entität:

<one-to-one field="masterentity" target-entity="MasterEntity" inversed-by="subentities"> 
    <join-column name="idMaster" referenced-column-name="idMaster" /> 
</one-to-one> 

Ich verstehe nicht, warum dieser Fehler ausgelöst wird, aber ich glaube, dass es von Beziehung kommt.

Antwort

0

Ihre Karte ist verwirrend. Wenn Sie eine Masterentity viele Untertiteln definiert haben, dann sollten Sie für Subentity::masterentity umgekehrte Beziehung setzen: many-to-one anstelle von Eins-zu-Eins.

+0

Es war tatsächlich eine Eins-zu-Eins-Beziehung, die diesen Fehler verursachte. Wenn ich eins-zu-eins durch viele eins zu eins ersetze und mein Fehler verschwunden und Aktualisierung erfolgreich ist. Danke Meze! –