【问题标题】:Unable to delete Entity with Many to Many related objects using SF2 Form无法使用 SF2 表单删除具有多对多相关对象的实体
【发布时间】:2018-06-01 15:53:23
【问题描述】:

我有一个活动计划系统,但我遇到了问题。我的主要项目称为 AircrewAvailability,并通过多对多关系链接到 Period 项目(Period 必须保持不可知,以便其他实体可以使用它而不存储它们的 id)。

此可用性显示在 FullCalendar 系统上:每个可用性的每个时段都是 FullCalendar 上的一个事件。单击 FullCalendar 时,我们会访问 CRUD 表单。

创建和编辑都可以正常工作,但删除很麻烦。当我尝试删除可用性时,ORM 尝试删除 Period 但不触及关​​系表(aircrew_availability_period),所以我得到了一个完整性约束违规(这很有意义)。

这是我的映射:

可用性实体:

<entity name="Mouke\Component\Availability\Model\AircrewAvailability" table="TBL_aircrew_availability">
    <id name="id" length="40">
        <generator strategy="CUSTOM"/>
        <custom-id-generator class="Mouke\Component\Resource\Doctrine\ORM\Id\Sha1IdGenerator"/>
    </id>
    <many-to-many target-entity="Mouke\Component\Application\Model\PeriodInterface" field="periods" orphan-removal="true" fetch="EAGER">
        <cascade>
            <cascade-all/>
        </cascade>
        <join-table name="aircrew_availability_period">
            <join-columns>
                <join-column name="aircrew_availability_id"/>
            </join-columns>
            <inverse-join-columns>
                <join-column name="period_id"/>
            </inverse-join-columns>
        </join-table>
        <gedmo:versioned/>
    </many-to-many>
</entity>

</doctrine-mapping>

期间实体:

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping">

<entity name="Mouke\Component\Application\Model\Period" table="TBL_period">
    <id name="id" column="id" type="string" length="40">
        <generator strategy="CUSTOM"/>
        <custom-id-generator class="Mouke\Component\Resource\Doctrine\ORM\Id\Sha1IdGenerator"/>
    </id>
    <field name="startedAt" column="started_at" type="datetime"/>
    <field name="endedAt" column="ended_at" type="datetime"/>
</entity>

</doctrine-mapping>

关于我的表格,这里是相关部分:

可用性表格:

$builder->add('periods', CollectionType::class, [
            'entry_type' => PeriodType::class,
            'label' => 'Periods',
            'allow_add' => true,
            'allow_delete' => true,
            'by_reference' => false,
            'attr' => [
                'class' => 'ajax-collection section-no-padding',
            ],
        ]);

句号:

$builder
        ->add('startedAt', DateTimePickerType::class, [
            'label' => 'model.started_at',
            'model_timezone' => $options['model_timezone'],
        ])
        ->add('endedAt', DateTimePickerType::class, [
            'label' => 'model.ended_at',
            'model_timezone' => $options['model_timezone'],
        ]);

棘手的部分:我可以从可用性中删除一个期间,没问题。但是,如果可用性没有时间段,它不会显示在我的日历中,因此您无法再对其进行编辑。不仅“幽灵实体”可能有我不想处理的副作用,而且“删除句点”删除整个可用性对用户不友好,尤其是当你有一个巨大的“删除”按钮时表单的底部。

对这个问题有什么想法吗?

【问题讨论】:

    标签: symfony doctrine-orm orm many-to-many sylius


    【解决方案1】:

    错过了on-delete="CASCADE" 符号:

    <join-table name="aircrew_availability_period">
                <join-columns>
                    <join-column name="aircrew_availability_id" on-delete="CASCADE"/>
                </join-columns>
                <inverse-join-columns>
                    <join-column name="period_id" on-delete="CASCADE"/>
                </inverse-join-columns>
            </join-table>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多