У меня проблема при попытке обновить таблицу. Я пытаюсь выполнить команду следовать:Doctrine Update - Mysql Errno: 150
sudo -u www-data -H ./app/console doctrine:schema:update --dump-sql
ALTER TABLE users ADD CONSTRAINT FK_1483A5E9A35D7AF0 FOREIGN KEY (invitation_id) REFERENCES Invitation (code);
CREATE UNIQUE INDEX UNIQ_1483A5E9A35D7AF0 ON users (invitation_id);
На основе этой конфигурации:
#../Entity/Users.php
/**
* @ORM\OneToOne(targetEntity="Invitation", inversedBy="user")
* @ORM\JoinColumn(referencedColumnName="code")
* @Assert\NotNull(message="Your invitation is wrong")
*/
protected $invitation;
#../Entity/Invitations.php
/** @ORM\OneToOne(targetEntity="Users", mappedBy="invitation", cascade={"persist", "merge"}) */
protected $user;
это дает мне ошибку:
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'ALTER TABLE users ADD CONSTRAINT FK_1483A5E9F11D61A2 FOREIGN KEY (invitation) REFERENCES Invitation (code)':
SQLSTATE[HY000]: General error: 1005 Can't create table 'loopanime-mvc.#sql-402_bc3' (errno: 150)
Обе таблицы находятся на InnoDB и коллекции ut8_unicode_ci. Я не пытался запустить, чтобы создать индекс вручную, потому что это не то, что я хочу! Но почему, черт возьми, доктрина не создает сначала IDX перед FK ??
Как я могу решить свою дилемму. Спасибо. Извините, если вопрос не ясен, я не могу описать больше этого ...
Errno 150 может быть вызван различиями в типе данных, но он также может быть вызван, если в таблице нет данных, которые не удовлетворяют ограничению. Поэтому я бы предположил, что у вас есть несколько строк в «users», которые ссылаются на несуществующий код приглашения. –
Я усекал обе таблицы, но до сих пор не делает этого трюка. Если я добавлю указатель вручную, а затем создаю FK, он будет работать. Я думаю, что это ошибка доктрины, доводя ее до последней. Или есть мои аннотации. –
Какую версию MySQL вы используете? Создание внешнего ключа должно создать необходимый индекс неявно с MySQL 4.1.2, который является древним историческим артефактом по сегодняшним стандартам. –