#php #mysql #symfony #doctrine-orm #doctrine
#php #mysql #symfony #doctrine-orm #доктрина
Вопрос:
Я создал два пользовательских типа сопоставления: один для объекта с денежной стоимостью и один для объекта с электронной почтой
Теперь каждый раз, когда я запускаю app/console doctrine:schema:validate
Doctrine, мне сообщается, что база данных не синхронизирована.
Сброс sql
с app/console doctrine:schema:update --dump-sql
помощью it хочет каждый раз обновлять одни и те же поля одинаковым образом:
ALTER TABLE invoices CHANGE total total VARCHAR(255) NOT NULL;
ALTER TABLE subscriptions CHANGE next_payment_amount next_payment_amount VARCHAR(255) NOT NULL;
ALTER TABLE stripe_charges CHANGE amount amount VARCHAR(200) NOT NULL, CHANGE receipt_email receipt_email VARCHAR(255) DEFAULT NULL;
ALTER TABLE stripe_customers CHANGE email email VARCHAR(255) DEFAULT NULL;
Каждый раз, когда он пытается обновить эти таблицы, устанавливая их в том же состоянии, в котором они уже находятся. Это моя ошибка или ошибка Доктрины?
Вот код для двух типов: MoneyType
и EmailType
.
Проблема с GitHub / Doctrine здесь.
Ответ №1:
Doctrine видит каждый из столбцов в вашей базе данных как строки, но думает, что вы хотите, чтобы они были деньгами / электронной почтой, поэтому решает, что вам нужно каждый раз мигрировать.
Способ отсортировать это — добавить requiresSQLCommentHint
так, чтобы он добавлял текст в ваш комментарий к столбцу, чтобы показать, что это действительно правильный тип клиента. Вы делаете это, просто добавляя..
/**
* {@inheritdoc}
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}
.. для ваших пользовательских типов, а Doctrine обработает все остальное.