Payum Symfony 原则无法创建 Table
Payum Symfony Doctrine Can't Create Table
我正在尝试将对配置文件(称为 Square)的引用添加到我的支付模型(Payum\Core\Model\ArrayObject 的扩展名),但我无法在 table 上添加外键。我想这样做,以便在处理付款时我可以更新一个字段,说明广场现在已付款。这是我的设置:
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 支付模型。
[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)
--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);
其他几个实体使用 msid 字段加入,只是不适用于我的 Payum 支付模型。任何帮助将不胜感激。
错误消息实际上是说MySQL 无法创建外键。由于您正在执行 ALTER TABLE
,因此 table 应该已经存在。由于 table 可能已经存在,因此 payment
table 中可能已经有一些数据,而 square
table 中没有。
其他值得研究的内容是两列是否具有完全相同的类型(包括 signed/unsigned)并且具有匹配的排序规则。在 table 级别,您可以查看引擎是否相同、字符集是否相同以及两个 table 是否不是临时 table。
我正在尝试将对配置文件(称为 Square)的引用添加到我的支付模型(Payum\Core\Model\ArrayObject 的扩展名),但我无法在 table 上添加外键。我想这样做,以便在处理付款时我可以更新一个字段,说明广场现在已付款。这是我的设置:
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 支付模型。
[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)
--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);
其他几个实体使用 msid 字段加入,只是不适用于我的 Payum 支付模型。任何帮助将不胜感激。
错误消息实际上是说MySQL 无法创建外键。由于您正在执行 ALTER TABLE
,因此 table 应该已经存在。由于 table 可能已经存在,因此 payment
table 中可能已经有一些数据,而 square
table 中没有。
其他值得研究的内容是两列是否具有完全相同的类型(包括 signed/unsigned)并且具有匹配的排序规则。在 table 级别,您可以查看引擎是否相同、字符集是否相同以及两个 table 是否不是临时 table。