2016-05-24 8 views
1

私の支払いモデル(Payum \ Core \ Model \ ArrayObjectの拡張)にプロファイルへの参照(Squareと呼ばれる)を追加しようとしていますが、テーブルの上に。私は支払いが処理されるときに私は広場が今支払われたと言っているフィールドを更新することができるようにこれをしたいと思います。Payum Symfony Doctrineはテーブルを作成できません

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; 

エラーコード:ここに私のセットアップがある

[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) 

いくつかの他のエンティティは、上の参加をMSIDフィールドを使用し、 Payum Paymentモデルでは機能しません。 --dump-SQLの

[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) 

出力は

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); 

いくつかの他のエンティティは、それだけで私のPayum支払いモデルで作業をしていない、に参加するためにMSIDフィールドを使用します。どんな助けでも大歓迎です。

答えて

1

エラーメッセージは、実際にMySQLが外部キーを作成できないことを示しています。 ALTER TABLEを実行しているので、テーブルはすでにそこにあるはずです。おそらくテーブルがすでに存在しているため、テーブルにはないデータがすでにあることがあります。paymentテーブルには、

両方の列が完全に同じ型(符号付き/符号なしを含む)で、照合順序が一致しているかどうかを調べる必要があるその他の要素があります。テーブルレベルでは、エンジンが同じか、文字セットが同じで、両方のテーブルがテンポラリテーブルでない場合は、エンジンを調べることができます。

+0

私はこの回答を正しいとマークした理由を強調するために、私が持っていた問題は古いテーブルがMyISAMであり、新しいテーブルの教義がInnoDBであるということでした。すべてのテーブルをInnoDBにアップグレードすると、外部キーが適切に追加されました。ありがとうSebastiaan。 – AMB0027