如何强制底层表单对象超越父实体的关系?
How to force the underlying form object to overtake the parent entity for its relation?
我有一个主实体和第二个。
假设您有一张地图,地图上有一些带坐标的点。
我希望能够为点动态添加新记录,所以我选择了表单类型的集合类型。
我也有第二个实体的正确表单类型。一切正常,除了新添加的点没有与主实体保持一致。我怎样才能告诉表单超越父实体并设置为适当的 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
* @ORM\OneToMany(targetEntity="ADN\CustomBundle\Entity\MapCoordinate", cascade={"persist","remove"}, mappedBy="map")
* @ORM\JoinColumn(onDelete="CASCADE",name="route_points",nullable=true, referencedColumnName="map")
*/
protected $routePoints;
积分实体
/**
* @ORM\ManyToOne(inversedBy="routePoints", targetEntity="ADN\CustomBundle\Entity\CycleMap")
* @ORM\JoinColumn(name="map",referencedColumnName="id")
*/
protected $map;
您的第二个实体实例未持久化,因为它们属于双向关系的反面。您可以在 Doctrine documentation.
上找到更多相关信息
为了解决您的问题,您还需要更新拥有方。为此,需要在您的主实体中进行一行更改:
<?php
/** Master entity */
use ADN\CustomBundle\Entity\MapCoordinate;
class CycleMap
{
// ...
public function addRoutePoint(MapCoordinate $routePoint)
{
// The magical line
$routePoint->setMap($this);
$this->routePoints[] = $routePoint;
return $this;
}
}
我有一个主实体和第二个。
假设您有一张地图,地图上有一些带坐标的点。
我希望能够为点动态添加新记录,所以我选择了表单类型的集合类型。
我也有第二个实体的正确表单类型。一切正常,除了新添加的点没有与主实体保持一致。我怎样才能告诉表单超越父实体并设置为适当的 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
* @ORM\OneToMany(targetEntity="ADN\CustomBundle\Entity\MapCoordinate", cascade={"persist","remove"}, mappedBy="map")
* @ORM\JoinColumn(onDelete="CASCADE",name="route_points",nullable=true, referencedColumnName="map")
*/
protected $routePoints;
积分实体
/**
* @ORM\ManyToOne(inversedBy="routePoints", targetEntity="ADN\CustomBundle\Entity\CycleMap")
* @ORM\JoinColumn(name="map",referencedColumnName="id")
*/
protected $map;
您的第二个实体实例未持久化,因为它们属于双向关系的反面。您可以在 Doctrine documentation.
上找到更多相关信息为了解决您的问题,您还需要更新拥有方。为此,需要在您的主实体中进行一行更改:
<?php
/** Master entity */
use ADN\CustomBundle\Entity\MapCoordinate;
class CycleMap
{
// ...
public function addRoutePoint(MapCoordinate $routePoint)
{
// The magical line
$routePoint->setMap($this);
$this->routePoints[] = $routePoint;
return $this;
}
}