2016-05-24 3 views
1

Я пытаюсь добавить ссылку на профиль (называемый Square) на мою модель оплаты (расширение Payum \ Core \ Model \ ArrayObject), но я не могу добавить внешний ключ на столе. Я хочу сделать это, чтобы при обработке платежа я мог обновить поле, в котором говорится, что квадрат теперь оплачен. Вот мои настройки: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) 

Некоторые другие лица используют ИИМС поле, чтобы присоединиться на, он просто не работает с моей моделью Payum Payment.

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

Некоторые другие объекты используют ИИМС поле, чтобы присоединиться на это просто не работает с моей Payum модели оплаты. Любая помощь будет принята с благодарностью.

ответ

1

В сообщении об ошибке фактически говорится, что MySQL не может создать внешний ключ. Поскольку вы выполняете ALTER TABLE, таблицы уже должны быть там. Поскольку таблицы, по-видимому, уже существуют, возможно, что в таблице уже есть данные, которые не находятся в таблице square.

Другие предметы, на которые стоит обратить внимание, - это то, что оба столбца имеют одинаковый тип (включая подписанный/неподписанный) и имеют соответствующую сортировку. На уровне таблицы вы можете посмотреть, является ли движок одинаковым, если кодировка одинаков и если обе таблицы не являются временными таблицами.

+0

Чтобы подчеркнуть, почему я правильно ответил на этот ответ, проблема, с которой я столкнулась, заключалась в том, что мои старые таблицы были MyISAM, а добавленная новая доктрина таблиц была InnoDB. Как только я обновил все таблицы до InnoDB, внешние ключи были добавлены соответствующим образом. Спасибо Себастьяну. – AMB0027

Смежные вопросы