Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 帕尤姆·西蒙尼主义可以';不创建表_Php_Symfony_Doctrine Orm_Stripe Payments_Payum - Fatal编程技术网

Php 帕尤姆·西蒙尼主义可以';不创建表

Php 帕尤姆·西蒙尼主义可以';不创建表,php,symfony,doctrine-orm,stripe-payments,payum,Php,Symfony,Doctrine Orm,Stripe Payments,Payum,我正在尝试向我的支付模型(Payum\Core\model\ArrayObject的扩展)添加对配置文件(称为Square)的引用,但无法在表中添加外键。我想这样做,以便在处理付款时,我可以更新一个字段,说明广场现在已付款。以下是我的设置: Square.php /** * @var integer * * @ORM\Column(name="msid", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTIT

我正在尝试向我的支付模型(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)
输出--dumpsql

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
,所以表应该已经在那里了。由于这些表可能已经存在,可能是
付款
表中已经有一些数据,而
平方
表中没有这些数据


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

为了强调为什么我将这个答案标记为正确,我遇到的问题是我的旧表是MyISAM,而新添加的表是InnoDB。一旦我将所有表升级到InnoDB,外键就被适当地添加了。谢谢你,塞巴斯蒂安。