Всем привет. Проект на Symfony 3 и PostgreSQL. При выполнении миграции способом:
doctrine:migrations:diffdoctrine:migrations:migrateСоздается миграция и выполняется. Все ок.
Но если в Entity указать схему - @ORM\Table(name="public.user"). То при последующих миграциях (я про использование diff) моя модель User будет добавляться в миграцию как будто бы нет такой таблицы в бд.
Я так понимаю diff не видит схему "public" в бд.
Ребята, в какую сторону копать? Перегуглил уже наверное все что можно и нельзя. Спасибо!
Имя схемы необходимо указывать отдельным атрибутом schema, доступен с версии doctrine 2.5, но для symfony 3 это ограничение помнится уже не проблема в любом раскладе.
Т.е. вот так:
@ORM\Table(name="user", schema="public")
Для схемы public обычно можно явно и не указывать. Но зависит от настройки пользователя в базе search_path.
А вот поскольку user - слово зарезервированное, то, оказывается, доктрине это ещё специально надо объяснить с помощью специальных кавычек:
@ORM\Table(name="`user`")
Так по крайней мере утверждает документация. Теперь в запросах тоже должны экранироваться имена. Возможно это diff'у до кучи и не нравится.
PS: в migrations:diff для postgresql есть неприятный уже не первый год открытый баг, когда всегда вместо сообщения что ничего не изменено генерируется пустая миграция up и попытка создать схему public в down. В комментариях к этому багу я описал обходной способ решения.
Продвижение своими сайтами как стратегия роста и независимости