【问题标题】:Payum Symfony Doctrine Can't Create TablePayum Symfony 学说无法创建表
【发布时间】:2016-09-21 00:49:33
【问题描述】:

我正在尝试向我的付款模型(Payum\Core\Model\ArrayObject 的扩展)添加对配置文件(称为 Square)的引用,但我无法在表上添加外键。我想这样做,以便在处理付款时我可以更新一个字段,说明该广场现在已付款。这是我的设置:

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 支付模型。任何帮助将不胜感激。

【问题讨论】:

    标签: php symfony doctrine-orm stripe-payments payum


    【解决方案1】:

    错误信息实际上是说 MySQL 不能创建外键。由于您正在执行ALTER TABLE,因此表应该已经存在。由于这些表可能已经存在,可能是payment 表中已经有一些数据,而square 表中没有这些数据。

    其他值得研究的内容是,两列是否具有完全相同的类型(包括有符号/无符号)并且具有匹配的排序规则。在表级别,您可以查看引擎是否相同、字符集是否相同以及两个表是否都不是临时表。

    【讨论】:

    • 为了强调为什么我将此答案标记为正确,我遇到的问题是我的旧表是 MyISAM,而添加的新表学说是 InnoDB。一旦我将所有表升级到 InnoDB,就适当地添加了外键。谢谢塞巴斯蒂安。
    猜你喜欢
    • 2011-08-12
    • 2016-10-04
    • 2012-06-11
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多