У меня есть система планирования деятельности, и я столкнулся с проблемой.Мой основной элемент называется AircrewAvailability и связан с элементом «Период» через отношение «многие ко многим» (период должен оставаться независимым, чтобы его могли использовать другие объекты без сохранения их идентификаторов).
Эта доступность отображается насистема FullCalendar: каждый период каждой доступности является событием в FullCalendar.При нажатии на FullCalendar мы получаем доступ к форме CRUD.
Создание и редактирование работают нормально, но удаление проблематично.Когда я пытаюсь удалить доступность, ORM пытается удалить период, но не касается таблицы отношений (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'],
]);
Сложная часть: я могу удалить период из доступности, нет проблем.Но если у доступности нет периода, она не отображается в моем календаре, поэтому вы больше не можете ее редактировать.Не только у «призрачной сущности» могут быть побочные эффекты, с которыми я не хочу иметь дело, но также не удобно «удалять периоды», чтобы удалить всю доступность, особенно если у вас есть огромная кнопка «Удалить» ввнизу формы.
Есть идеи по этому вопросу?