2016-05-24 10 views
1

Ich versuche, einen Verweis auf ein Profil (genannt Square) zu meinem Zahlungsmodell (Erweiterung von Payum \ Core \ Model \ ArrayObject) hinzuzufügen, aber ich kann keinen Fremdschlüssel hinzufügen auf dem Tisch. Ich möchte dies tun, damit, wenn die Zahlung verarbeitet wird, ich ein Feld aktualisieren kann, das besagt, dass das Quadrat jetzt bezahlt wird. Hier ist mein Setup:Payum Symfony Doctrine kann keine Tabelle erstellen

Square.php

/** 
* @var integer 
* 
* @ORM\Column(name="msid", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $msid; 

Payment.php

/** 
* @ORM\OneToOne(targetEntity="Square") 
* @ORM\JoinColumn(name="msid", referencedColumnName="msid") 
*/ 
private $square; 

Fehlercodes:

[Doctrine\DBAL\Exception\DriverException] 
An exception occurred while executing 'ALTER TABLE payment ADD CONSTRAINT FK_6D28840D405F5364 FOREIGN KEY (msid) REFERENCES square (msid)': 
    SQLSTATE[HY000]: General error: 1005 Can't create table 'memorysq_version2.#sql-1658_1487b' (errno: 150) 

Mehrere andere Organisationen nutzen die MSID Feld zu verbinden, Es funktioniert einfach nicht mit meinem Payum-Zahlungsmodell.

[Doctrine\DBAL\Driver\PDOException]                  
SQLSTATE[HY000]: General error: 1005 Can't create table 'memorysq_version2.#sql-1658_1487b' (errno: 150) 

[PDOException]                        
SQLSTATE[HY000]: General error: 1005 Can't create table 'memorysq_version2.#sql-1658_1487b' (errno: 150) 

Ausgabe von --dump-sql

ALTER TABLE comment ADD CONSTRAINT FK_9474526C405F5364 FOREIGN KEY (msid) REFERENCES square (msid); 
ALTER TABLE asset ADD CONSTRAINT FK_2AF5A5C405F5364 FOREIGN KEY (msid) REFERENCES square (msid); 
ALTER TABLE payment ADD CONSTRAINT FK_6D28840D405F5364 FOREIGN KEY (msid) REFERENCES square (msid); 
ALTER TABLE square ADD CONSTRAINT FK_CDE368A9F132696E FOREIGN KEY (userid) REFERENCES user (userid); 
ALTER TABLE square ADD CONSTRAINT FK_CDE368A96AFF851C FOREIGN KEY (squaretype) REFERENCES product (id); 
ALTER TABLE square ADD CONSTRAINT FK_CDE368A9DC01AA6E FOREIGN KEY (dualpicture) REFERENCES asset (assetid); 
ALTER TABLE square ADD CONSTRAINT FK_CDE368A97F98CD1C FOREIGN KEY (clientid) REFERENCES client (clientid); 
ALTER TABLE square ADD CONSTRAINT FK_CDE368A916DB4F89 FOREIGN KEY (picture) REFERENCES asset (assetid); 

Mehrere andere Einrichtungen verwenden, um das MSID-Feld mit meinem Payum Zahlungsmodell zu verbinden auf, ist es einfach nicht funktioniert. Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Die Fehlermeldung besagt tatsächlich, dass MySQL den Fremdschlüssel nicht erstellen kann. Da Sie eine ALTER TABLE ausführen, sollten die Tabellen bereits da sein. Da die Tabellen vermutlich bereits existieren, könnte es sein, dass es bereits einige Daten in der Tabelle payment gibt, die nicht in der Tabelle square enthalten ist.

Andere Dinge, die untersucht werden sollten, sind, wenn beide Spalten den exakt gleichen Typ haben (einschließlich signed/unsigned) und eine übereinstimmende Sortierung haben. Auf der Tabellenebene können Sie sehen, ob die Engine identisch ist, ob der Zeichensatz derselbe ist und ob beide Tabellen keine temporären Tabellen sind.

+0

Um zu betonen, warum ich diese Antwort als richtig markiert habe, bestand das Problem darin, dass meine alten Tabellen MyISAM waren und die neue Tabellendoktrin InnoDB war. Nachdem ich alle Tabellen auf InnoDB aktualisiert habe, wurden die Fremdschlüssel entsprechend hinzugefügt. Danke Sebastiaan. – AMB0027