2016-06-14 10 views
1

Ich habe zwei viele-zu-eins-Beziehungen, in denen Objekte $countryFrom und $countryTo von Notification die Werte aus der Spalte id_country_form und id_country_to erhalten und sehen in Country Tabelle für ein id mit dem gleichen Wert . Ich habe Setter und Getters für alle Eigenschaften.Lehre setzt gültige Parameter auf bündig auf null()

Entity Mitteilung

class Notification 
{ 
/** 
* @ORM\ManyToOne(targetEntity="Country") 
* @ORM\JoinColumn(name="id_country_from", referencedColumnName="id") 
*/ 
private $countryFrom; 

/** 
* @ORM\ManyToOne(targetEntity="Country") 
* @ORM\JoinColumn(name="id_country_to", referencedColumnName="id") 
*/ 
private $countryTo; 

/** 
* @var integer 
* 
* @ORM\Column(name="id_country_from", type="integer", nullable=false) 
*/ 
private $idCountryFrom; 

/** 
* @var integer 
* 
* @ORM\Column(name="id_country_to", type="integer", nullable=false) 
*/ 
private $idCountryTo; 
} 


Entity Land

class Country 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 
} 

Allerdings, wenn ich möchte Daten in DB von der Steuerung einzusetzen, die Eigenschaften im Zusammenhang mit id_country_form und id_country_to sind auf Null gesetzt.


Controller-Methode

$notif = new Notification; 
$notif->setCountryFrom(5); // SET to NULL 
$notif->setCountryTo(6); // SET to NULL  
$notif->setCreatedAt(new \DateTime()); 

$em->persist($notif); 
$em->flush(); 


var_dump ($ Benachrichtigung) nach persistieren()

object(AppBundle\Entity\Notification)[457] 
private 'countryFrom' => null 
private 'countryTo' => null 
private 'idCountryFrom' => int 5 // SET 
private 'idCountryTo' => int 6 // SET  
private 'createdAt' => 
    object(DateTime)[448] 
    public 'date' => string '2016-06-14 06:32:35.000000' (length=26) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'UTC' (length=3) 
private 'id' => null 
Hier

wir sehen, dass idCurrencyFrom und idCurrencyTo sind gefassten nach persistieren(), aber der nächste Fehler auftritt:

An exception occurred while executing 'INSERT INTO alerts (id_currency_from, id_currency_to, active, created_at) VALUES (?, ?, ?, ?)' with params [null, null, "2016-06-14 06:32:35"]: 

Der Code gearbeitet, bevor ich die Viele-zu-eins-Beziehungen festgelegt.

Antwort

0

Ich kann nicht annehmen, ohne Ihre Setter-Methoden zu sehen, aber Sie sollten die Entity an Setter-Methode nicht ID übergeben. Beispielsweise;

$country = $em->getRepository('AppBundle:Country')->find(5); 
$notif->setCountry($country); 
+0

Haben Sie sich das Ergebnis 'var_dump' angesehen? Die Werte sind richtig gespeichert, das Problem ist, wenn ich flush() rufe, weiß ich nicht, was Doctrine tut, aber es überschreibt die Werte auf "null". – Bacchus

+0

Sie setzen die $ idCountryFrom-Eigenschaft und nicht die $ countryFrom -Eigenschaft, und in Ihrer Entität definieren Sie 2 Eigenschaften für 1 Spalte. Sie sollten $ idCountryFrom und $ idCountryTo entfernen. – jrergon

Verwandte Themen