我使用doctrine和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 {
...
}
和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...
答案 0 :(得分:1)
可以找到检查文档......
user是SQL标准中的保留关键字。如果你需要使用 保留字,用反引号包围它们,例如 @ORM \表(名称=&#34;`user`&#34)
这可能是你的问题吗?
https://symfony.com/doc/master/bundles/FOSUserBundle/index.html#a-doctrine-orm-user-class
答案 1 :(得分:0)
与Postgres一起使用时,这是Doctrine中的一个错误。我一直有迁移这个问题。我只是删除违规行,一切都很好。 @Enumus是正确的,你必须回溯勾选你的注释。
/**
* User
*
* @ORM\Table(name="
使用者")
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*
*/