我已经设置了独立于Symfony框架的Doctrine和Symfony形式(因为我不需要大部分)。
我遇到的问题是,当试图坚持一个新的"审计"时,它有一个"类型"原则,似乎想要坚持关系的拥有方(类型)。
例如,审计可能具有一种车辆服务。
// -- Model/Audit.php --
/**
* @var ModelType
*
* @ORMManyToOne(targetEntity="ModelAuditType", inversedBy="audits")
* @ORMJoinColumn(name="type_id", referencedColumnName="id", nullable=true)
*/
private $type;
/**
* Set type
*
* @param ModelType $type
* @return Audit
*/
public function setType(ModelType $type)
{
$this->type = $type;
return $this;
}
然后在相反的一面:
/**
* @ORMOneToMany(targetEntity="ModelAudit", mappedBy="type")
* @var type */
private $audits;
public function __construct() {
$this->audits = new DoctrineCommonCollectionsArrayCollection();
}
持久性代码如下所示:
$data = $form->getData();
$entityManager->persist($data);
$entityManager->flush();
最后,表单类是:
class AuditType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('name')
->add('type', 'entity', array(
'class' => "ModelType"
));
}
所有看起来(至少对我来说)与Doctrine和Symfony方面的所有文档中完全相同,但是我收到此错误:
通过关系"模型\审核#类型"找到了新实体 未配置为级联实体的持久操作: 车辆服务。要解决此问题:显式调用 EntityManager#persist() 或配置级联 例如,将此关联保留在映射中 @ManyToOne(..,cascade={"persist"}).">
这真的很令人沮丧,因为我不想保留类型方面,我只想将(最基本的术语)3 的 id 放入type_id列中。然而,教义似乎认为我想创造一种新的"类型",而我当然不会。它们已经存在。
使用 $entityManager->merge($audit); 部分工作,它允许保存初始审核及其 FK。但是,它导致任何嵌入的表单都被忽略。
我认为你需要设置
/**
* @ORMOneToMany(targetEntity="ModelAudit", mappedBy="type")
* @var type
*/
private $audits;
public function __construct() {
$this->audits = new DoctrineCommonCollectionsArrayCollection();
}
/**
* @return ArrayCollection
*/
public function getAudits()
{
return $this->audits;
}
/**
* @param Audit $audit
*/
public function addAudits(Audit $audit)
{
$this->audits->add($audit);
$audit->setTyoe($this);
}
和在类型审核模型中
// -- Model/Audit.php --
/**
* @var ModelType
*
* @ORMManyToOne(targetEntity="ModelAuditType", inversedBy="audits")
* @ORMJoinColumn(name="type_id", referencedColumnName="id", nullable=true)
*/
private $type;
/**
* Set type
*
* @param ModelType $type
* @return Audit
*/
public function setType(ModelType $type)
{
$this->type = $type;
}