2017-03-31 2 views
0

Ich habe Doctrine und Symfony-Forms unabhängig von der Symfony Framework (wie ich brauche das meiste davon nicht).Doktrin versucht zu persistent Besitzer

Das Problem, das ich habe, ist, wenn man versucht, ein neues "Audit" zu bestehen, das eine "Typ" -Doktrin zu haben scheint, die besitzende Seite der Beziehung (Typ) bestehen zu wollen.

Zum Beispiel als Audit kann eine Art von Fahrzeug Service haben.

// -- Model/Audit.php -- 
/** 
* @var \Model\Type 
* 
* @ORM\ManyToOne(targetEntity="Model\Audit\Type", inversedBy="audits") 
* @ORM\JoinColumn(name="type_id", referencedColumnName="id", nullable=true) 
*/ 
private $type; 
/** 
* Set type 
* 
* @param \Model\Type $type 
* @return Audit 
*/ 
public function setType(\Model\Type $type) 
{ 
    $this->type = $type; 
    return $this; 
} 

Und dann in der umgekehrten Seite:

/** 
* @ORM\OneToMany(targetEntity="Model\Audit", mappedBy="type") 
* @var type */ 
private $audits; 

public function __construct() { 
    $this->audits = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

Persistance Code sieht wie folgt aus:

$data = $form->getData(); 
$entityManager->persist($data); 
$entityManager->flush(); 

Und schließlich die Form-Klasse:

class AuditType extends AbstractType { 

    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder 
      ->add('name') 
      ->add('type', 'entity', array(
       'class' => "Model\Type" 
      )); 
    } 

Alle Blicke (für mich zumindest) genau das sam e wie in allen Dokumentationen Seiten beiden Lehren und Symfony aber ich diesen Fehler:

A new entity was found through the relationship 'Model\Audit#type' that was not configured to cascade persist operations for entity: Vehicle Service. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"})."

Welche wirklich frustrierend ist, wie ich will nicht den Typen Seite bestehen bleiben, mag ich gerade zu (in den meisten Grundbegriffe) die ID von 3 in die Spalte type_id. Doch scheint Doctrine zu glauben, ich möchte einen neuen "Typ" schaffen, den ich ganz sicher nicht habe. Sie existieren bereits.


Verwenden von $ entityManager-> merge ($ audit); Teilweise funktioniert es, dass das initiale Audit und seine FKs gespeichert werden können. Es hat jedoch dazu geführt, dass eingebettete Formulare ignoriert wurden.

+0

In Ihrem Formular-Builder, versuchen Sie den 'Typ' Eintrag Wechsel zu ** -> Add ('type' , EntityType :: class, array (** – ehymel

+0

Entity wie es ist, ist das gleiche wie EntityType :: aber für ältere Versionen von PHP habe ich nicht erwähnt, aber ich bin auf 5,3 begrenzt und daher Symfony-Form 2.6 .. – Doug

Antwort

0

Ich glaube, Sie setzen müssen

/** 
* @ORM\OneToMany(targetEntity="Model\Audit", mappedBy="type") 
* @var type 
*/ 
private $audits; 

public function __construct() { 
$this->audits = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

/** 
* @return ArrayCollection 
*/ 
public function getAudits() 
{ 
    return $this->audits; 
} 

/** 
* @param Audit $audit 
*/ 
public function addAudits(Audit $audit) 
{ 
    $this->audits->add($audit); 
    $audit->setTyoe($this); 
} 

und in Typ Audit.model

 // -- Model/Audit.php -- 
    /** 
    * @var \Model\Type 
    * 
    * @ORM\ManyToOne(targetEntity="Model\Audit\Type", inversedBy="audits") 
    * @ORM\JoinColumn(name="type_id", referencedColumnName="id", nullable=true) 
    */ 
    private $type; 
    /** 
    * Set type 
    * 
    * @param \Model\Type $type 
    * @return Audit 
    */ 
    public function setType(\Model\Type $type) 
    { 
     $this->type = $type; 
    } 
Verwandte Themen