自上周以来,我一直在尝试解决这个奇怪的问题,但我仍然没有找到任何解决方案,所以我决定在这里提问。
为了更好地理解,我将简要介绍我的模型:
我有一个名为 Ruta 的实体,它有一组图像。Ruta 中的每个图像都称为 ImagenRuta,它具有一些属性,包括拥有 ImagenRuta 的实体 Ruta。(一对多关系)
你可以在这里看到我的实体 Ruta:https ://gist.github.com/b0ae0daaeebe4b6323d0
我的实体 ImagenRuta 在这里: https ://gist.github.com/9064fb2b5f4138423471
我的问题是,我无法从控制器更新任何 Ruta,而不会丢失有关 Ruta 拥有的 ImagenRuta 集合中的项目的信息。特别是 ImagenRuta 的属性“imagen”设置为空。其他属性(如 ImagenRuta 的 id 或 Ruta 的 id)不会丢失。
我认为问题可能与 ImagenRuta 形式的“imagen”类型文件有关。因为如果我将该字段设置为文本,实体 ImagenRuta 的属性“imagen”不会丢失在我要更新的 Ruta 具有的集合的任何 ImagenRuta 中。
这是我的 ImagenRuta 的表格:https ://gist.github.com/0409c630b8c9b3b08068
和我的 Ruta 表格: http: //gist.github.com/74db6231a2b238995fff
这是我为注意文本字段问题而编写的代码:
class ImagenRutaType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('imagen', 'text', array('required' => true));
}
}
我使用下面的句子来恢复实体 Ruta 中的原始 ImagenRuta 集合,然后通过执行使用表单信息修改该实体$form->bindRequest($request)
:
$anterior = $editForm->getData(); // get ruta entity in form
$originalImages = $anterior->getImagenes(); // get ImagenRuta collection
然后我将 $originalImages 与 $editForm 包含的 ImagenRuta 集合合并
$entity = $em->getRepository('RutasBundle:Ruta')->find($id);
$editForm = $this->createForm(new RutaType(), $entity);
$editForm->bind($request);
$imagenesNuevas = $entity->getImagenes()
// Merge $imagenesNuevas with $originalImages to not to lose any image
问题是我无法恢复 Ruta 之前的 ImagenRuta 集合,因为当我执行时:
$originalImages = $ anterior-> getImagenes()
在$originalImages
我有这个集合,是的,但是那个集合中的所有 ImagenRuta 都将“imagen”字段设置为 null(其他没有),我不知道为什么。正如我上面所说,我认为它可能与 ImagenRuta 表单中的“imagen”字段是“文件”类型有关,因为当这种情况发生时,我没有从表单修改的每个 imagenRuta 都会通过“imagen”字段集到达控制器为空。
请参阅我的控制器中的 updateAction 以获取更多详细信息:https ://gist.github.com/46e6d0d2f9e188f44030
我已经阅读了很多教程、博客、论坛和官方食谱文档,但我没有找到任何解决方案。我希望有人能帮助我。
问候。