Doctrine一直在尝试重新创建现有的表

时间:2017-08-16 06:05:41

标签: php postgresql symfony doctrine-orm doctrine

我使用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...

2 个答案:

答案 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") * */