Doctrine: всегда говорит мне, что база данных не синхронизирована после использования двух пользовательских типов сопоставления

#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 обработает все остальное.