无法编辑Doctrine ArrayCollection

时间:2015-01-20 14:52:29

标签: doctrine-orm zend-framework2 doctrine persistent arraycollection

我在编辑多对多协同的Doctrine2 ArrayCollection时遇到问题。 坚持一个新的实体是没有问题的,并且工作正常。但是如果我想用新添加的CollectionItems来持久化实体,我得到了一个

  

学说\ ORM \ ORMInvalidArgumentException

我使用xml-mapping,映射文件如下:

收据:

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="Application\Entity\Receipt" table="receipt" repository-class="Application\Repositories\ReceiptRepository">
        <indexes>
            <index name="FK_receipt_profession" columns="professsion"/>
            <index name="FK_receipt_items_needed" columns="items"/>
        </indexes>
        <id name="rId" type="integer" column="r_id">
            <generator strategy="IDENTITY"/>
        </id>
        <field name="name" type="string" column="name" length="100" nullable="false"/>
        <many-to-one field="profession" target-entity="Application\Entity\Profession">
            <join-columns>
                <join-column name="profession" referenced-column-name="p_id"/>
            </join-columns>
        </many-to-one>
        <many-to-many field="items" target-entity="Application\Entity\ItemsNeeded" inversed-by="receipt">
            <!--<cascade><cascade-all/></cascade>-->
            <join-table name="receipt_x_items_needed">
                <join-columns>
                    <join-column name="receipt" referenced-column-name="r_id"/>
                </join-columns>
                <inverse-join-columns>
                    <join-column name="itemNeeded" referenced-column-name="in_id"/>
                </inverse-join-columns>
            </join-table>
        </many-to-many>
    </entity>
</doctrine-mapping>

ItemsNeeded:

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="Application\Entity\ItemsNeeded" table="items_needed" repository-class="Application\Repositories\ItemsneededRepository">
    <indexes>
      <index name="FK_items_needed_receipt" columns="receipt_id"/>
      <index name="item_id" columns="item_id"/>
    </indexes>
    <id name="inId" type="integer" column="in_id">
      <generator strategy="IDENTITY"/>
    </id>
    <field name="count" type="integer" column="count" nullable="false"/>
    <many-to-one field="item" target-entity="Application\Entity\Items">
      <join-columns>
        <join-column name="item_id" referenced-column-name="i_id"/>
      </join-columns>
    </many-to-one>
      <many-to-many field="receipt" target-entity="Application\Entity\Receipt" mapped-by="items"/>
  </entity>
</doctrine-mapping>

和项目:

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="Application\Entity\Items" table="items" repository-class="Importer\Repository\ItemRepository">
        <unique-constraints>
            <unique-constraint name="buffed_id" columns="buffed_id"/>
        </unique-constraints>
        <id name="iId" type="integer" column="i_id">
            <generator strategy="IDENTITY"/>
        </id>
        <field name="name" type="string" column="name" length="100" nullable="false"/>
        <field name="buffedId" type="integer" column="buffed_id" nullable="false"/>
    </entity>
</doctrine-mapping>

收据表通过交叉的“receipt_x_items_needed”具有多对多关系。

如果我拨打$receipt->addItem($item);并且$ item是项目表中已存在的项目,我收到以下错误:

  

通过关系'Application \ Entity \ ItemsNeeded#item'找到了一个新实体,该关系未配置为对实体进行级联持久操作:Application \ Entity \ Items @ 0000000041f6e49000000000651183aa。要解决此问题:在此未知实体上显式调用EntityManager#persist()或在映射中配置级联持久保存此关联,例如@ManyToOne(..,cascade = {“persist”})。如果您无法找出导致问题的实体,请执行'Application \ Entity \ Items #__ toString()'以获取线索。

但这不是新实体。所有数据都已正确设置,正如我所写,如果我添加新收据,一切正常。

0 个答案:

没有答案