如何强制基础窗体对象超越其关系的父实体



我有一个主实体和第二个主实体。

假设你有一张地图,地图上有一些带坐标的点。

我希望能够为点添加动态的新记录,所以我选择了表单类型的集合类型。

我还有第二个实体的正确表单类型。除了新添加的点没有与主实体一起持久化之外,一切都正常。如何告诉窗体超越父实体并设置为适当的setter?

$builder->add('routePoints', 'collection', ['required' => false,'label' => '','attr'=>['class'=>'route-point'],'by_reference'=> true, 'type' => new MapCoordinateAdminType(), 'allow_add' => true, 'delete_empty' => true, 'allow_delete' => true, 'translation_domain' => 'maps']);

主实体

/**
 * @var array
 * @ORMOneToMany(targetEntity="ADNCustomBundleEntityMapCoordinate", cascade={"persist","remove"}, mappedBy="map")
 * @ORMJoinColumn(onDelete="CASCADE",name="route_points",nullable=true, referencedColumnName="map")
 */
protected $routePoints;

积分实体

/**
 * @ORMManyToOne(inversedBy="routePoints", targetEntity="ADNCustomBundleEntityCycleMap")
 * @ORMJoinColumn(name="map",referencedColumnName="id")
 */
protected $map;

您的第二个实体实例没有持久化,因为它们属于双向关系的反面。你可以在条令文档中找到更多关于这方面的信息。

为了解决您的问题,您还需要更新拥有方。要做到这一点,需要在主实体中进行一行更改:

<?php
/** Master entity */
use ADNCustomBundleEntityMapCoordinate;
class CycleMap
{
    // ...
    public function addRoutePoint(MapCoordinate $routePoint)
    {
         // The magical line
         $routePoint->setMap($this);
         $this->routePoints[] = $routePoint;
         return $this;
    }
}

相关内容

  • 没有找到相关文章

最新更新