Я использую доктрину с базой данных postgres вместе с FOSUserBundle. Почему-то каждый раз, когда я пытаюсь запустить doctrine:schema:update
, он пытается создать пользовательскую таблицу, даже если она уже существует.
Мне пришлось установить схему для пользовательской таблицы как общедоступную в сущности, потому что в противном случае FOS выдаст ошибку об отсутствующей схеме. Удаление этой аннотации от объекта остановит его от попытки воссоздать таблицу как бы то ни было.
Сущность определяется следующим образом:
<?php
namespace AppBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="user", schema="public")
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User extends BaseUser {
...
}
и запрос, который доктрина продолжает пытаться выполнить с schema="public"
На объекте установлено:
CREATE SEQUENCE public.user_id_seq INCREMENT BY 1 MINVALUE 1 START 1;
CREATE TABLE public."user" (id INT NOT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) DEFAULT NULL, password VARCHAR(255) NOT NULL, last_login TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, confirmation_token VARCHAR(180) DEFAULT NULL, password_requested_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, roles TEXT NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, PRIMARY KEY(id));
CREATE UNIQUE INDEX UNIQ_327C5DE792FC23A8 ON public."user" (username_canonical);
CREATE UNIQUE INDEX UNIQ_327C5DE7A0D96FBF ON public."user" (email_canonical);
CREATE UNIQUE INDEX UNIQ_327C5DE7C05FB297 ON public."user" (confirmation_token);
Если я добавлю schema="public"
теги к любому из моих других объектов, они демонстрируют то же поведение, но без него работают нормально. Это просто сущность User, которая не работает с FOSUserBundle со следующим сообщением при попытке создать пользователя, например:
SQLSTATE[42703]: Undefined column: 7 ERROR: column t0.username does not exist
LINE 1: SELECT t0.username AS username_1, t0.username_canonical AS u...
С проверкой документации можно ознакомиться …
пользователь является зарезервированным ключевым словом в стандарте SQL. Если вам нужно использовать
зарезервированные слова, окружите их кавычками, например
@ORM \ Table (имя = «` user`»)
Может ли это быть вашей проблемой?
https://symfony.com/doc/master/bundles/FOSUserBundle/index.html#a-doctrine-orm-user-class
Это ошибка в Doctrine при использовании с Postgres. У меня эта проблема с миграциями все время. Я просто удаляю оскорбительную строку и все хорошо. @Enumus верен, и вы должны поставить галочку в аннотации.
/**
пользователь
* User
*
* @ORM\Table(name="")
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*
*/