我正在使用带有postgres数据库和FOSUserBundle的学说。出于某种原因,每次我尝试运行doctrine:schema:update
时,它都会尝试创建用户表,即使它已经存在。
我不得不将用户表的架构设置为实体中的公共,因为 FOS 会因缺少架构而出错。但是,从实体中删除此批注将阻止它尝试重新创建表。
实体定义如下:
<?php
namespace AppBundleEntity;
use FOSUserBundleModelUser as BaseUser;
use DoctrineORMMapping as ORM;
/**
* @ORMTable(name="user", schema="public")
* @ORMEntity(repositoryClass="AppBundleRepositoryUserRepository")
*/
class User extends BaseUser {
...
}
而 doctrine 一直试图用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"
标签添加到我的任何其他实体,它们会表现出相同的行为,但是没有它它们就可以正常工作。例如,在尝试创建用户时,只有用户实体无法使用 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...
检查文档可以找到...
user 是 SQL 标准中的保留关键字。如果您需要使用 保留字,用反引号括起来,例如 @ORM\Table(name="'user'"(
可能是你的问题吗?
https://symfony.com/doc/master/bundles/FOSUserBundle/index.html#a-doctrine-orm-user-class
当与Postgres一起使用时,这是Doctrine中的一个错误。 我一直在迁移方面遇到这个问题。我只是删除了有问题的行,一切都很好。@Enumus是正确的,您必须反勾注释。
/**
* User
*
* @ORMTable(name="
用户")
* @ORMEntity(repositoryClass="AppBundleRepositoryUserRepository")
*
*/