1

特定のエンティティ (マスター エンティティ) のエンティティ コレクション (サブエンティティ) の位置を更新しようとしています。メソッドがフラッシュ命令を実行して更新をデータベースにプッシュするまで、すべてが機能します。

エラー メッセージは次のとおりです。

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    

コントローラーの方法は次のとおりです。

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
    ...
}

マスター エンティティはサブエンティティと 1 対多の関係を持ち、サブエンティティはマスター エンティティと 1 対 1 の関係を持ちます。以下のサンプル宣言:

マスター エンティティ:

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

サブエンティティ :

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

このエラーが発生する理由はわかりませんが、人間関係によるものだと思います。

4

1 に答える 1

0

あなたの地図は紛らわしいです。1 つのMasterentity に多くのサブエンティティがあると定義した場合は、1 対 1 ではなく多対 1Subentity::masterentityという逆の関係を設定する必要があります。

于 2012-04-12T09:49:15.063 に答える