2017-05-28 2 views
0

Ich habe einen Fehler beim Versuch, einige Zeilen in einer Tabelle einzufügen. Es ist ein Assoziationsproblem zwischen meinen Entitäten, aber ich weiß nicht, wie ich es lösen soll.Fremdschlüssel Einschränkung beim Einfügen von Zeilen in Tabelle

banque_statistiquecolle Tabelle ist leer und ich kann keine Zeile einfügen, banque_colle enthält einige Zeilen. Zeilen, die ich einfügen möchte, sind mit diesen banque_colle-Zeilen verknüpft.

Abfrage:

INSERT INTO banque_statistiquecolle (id, colle_id, effectif, moyenne, mediane, note100, major, minor) 
SELECT sc.id, sc.colle_id, sc.effectif, sc.moyenne, sc.mediane, sc.note100, sc.major, sc.minor 
FROM statistiquecolle_groupe scg 
LEFT JOIN statistiquecolle sc ON sc.id = scg.statistiquecolle_id 
WHERE scg.groupe_id = 1 
AND sc.id NOT IN (SELECT sc1.id 
        FROM statistiquecolle_groupe scg1 
        LEFT JOIN statistiquecolle sc1 ON sc1.id = scg1.statistiquecolle_id 
        WHERE scg1.groupe_id != 1) 

den Fehler:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: 
a foreign key constraint fails ('tutotour_tharmo18052017test'.'banque_statistiquecolle', 
CONSTRAINT 'FK_5C1250C5F0B40A43' FOREIGN KEY ('colle_id') REFERENCES 'banque_colle' ('id')) 

BanqueStatistiqueColle Entity:

/** 
* BanqueStatistiqueColle 
* 
* @ORM\Table(name="banque_statistiquecolle") 
* @ORM\Entity 
*/ 
class BanqueStatistiqueColle 
{ 
/** 
* @var integer 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @ORM\ManyToOne(targetEntity="\PACES\BanqueBundle\Entity\BanqueColle") 
* @ORM\JoinColumn(name="colle_id", referencedColumnName="id") 
*/ 
private $colle; 

{Other properties} 

/** 
* @ORM\OneToMany(targetEntity="\PACES\BanqueBundle\Entity\BanqueRepartitionColle", mappedBy="idStatColle", 
* cascade={"all"}) 
*/ 
private $repartitionsColle; 

BanqueColle Entity:

/** 
* Colle 
* 
* @ORM\Table(name="banque_colle") 
* @ORM\Entity 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"colle"="BanqueColle", "colleQC"="BanqueColleQC"}) 
*/ 
class BanqueColle 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

{Other properties} 

/** 
* @ORM\OneToMany(targetEntity="PACES\BanqueBundle\Entity\BanqueStatistiqueColle", mappedBy="colle", cascade={"all"}) 
*/ 
protected $statsColle; 
+0

Sie könnten damit beginnen, alle sc.colle_id mit banque_colle_id abzugleichen. –

Antwort

0

Der Fehler ist selbsterklärend

Integrität Einschränkungsverletzung: 1452 Es kann kein Kind Zeile hinzufügen oder aktualisieren: ein Fremdschlüssel nicht

Wenn zwei Tabelle mit Fremdschlüsselbeziehung binded werden, dass Fall Sie können nur die Werte in der untergeordneten Tabelle einfügen, die bereits in der übergeordneten Tabelle vorhanden sind.

Ihre Fremdschlüssel Beziehung ist:

FOREIGN KEY ('colle_id') REFERENCES 'banque_colle' ('id')) 

so können Sie nur diejenigen Wert in colle_id einfügen, die bereits ihre in 'banque_colle' ('id')) Spalte sind.

+0

Danke, ich habe gerade vergessen, dass ich banque_colle Inhalt gelöscht habe, damit es nicht funktioniert. –

Verwandte Themen