在PostgreSQL上不存在学说列id[英] Doctrine column id does not exist on PostgreSQL

本文是小编为大家收集整理的关于在PostgreSQL上不存在学说列id的处理方法,想解了在PostgreSQL上不存在学说列id的问题怎么解决?在PostgreSQL上不存在学说列id问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我被迫使用 postgresql .我已经阅读了一些有关它的信息,但仍然是新的,我不知道为什么要遇到这个错误:

SQLSTATE[42703]: Undefined column: 7 ERROR: column t0.id does not exist LINE 1: SELECT t0.id AS id1, t0.user AS user2, t0.email AS ma...

我检查了ID列的存在千次(几乎从字面上看).

我问我的朋友,他告诉我,PostgreSQL没有自动增量,我必须使用序列.我发现学说在将@GeneratedValue设置为自动时会自动生成序列(默认值).是的,这些序列在那里.

这是我的实体:

<?php

/**
 * @ORM\Entity
 */
class User
{

    /**
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /** @ORM\Column(type="string", nullable=true) */
    protected $name;

    // some more properties similar to $name

在另一个问题中( postgresql列'foo'不存在)他们想看到\d table的输出.这就是:

northys=# \d user
                         Table "public.user"
  Column  |          Type          |            Modifiers            
----------+------------------------+---------------------------------
 id       | integer                | not null
 name     | character varying(255) | default NULL::character varying
 email    | character varying(255) | not null
 password | character varying(255) | not null
Indexes:
    "user_pkey" PRIMARY KEY, btree (id)
    "uniq_8d93d649e7927c74" UNIQUE, btree (email)
Referenced by:
    TABLE "child" CONSTRAINT "fk_22b3542941807e1d" FOREIGN KEY (teacher_id) REFERENCES "user"(id)
    TABLE "event" CONSTRAINT "fk_3bae0aa7a76ed395" FOREIGN KEY (user_id) REFERENCES "user"(id)

我有 postgresql 9.4.1,我不使用任何数据库特定的插件来进行学说.您有什么想法,为什么不应该这样做?我被卡住了,试图找出几天的解决方案.

推荐答案

user a>.这是current_user.

的别名
regress=> SELECT * FROM user;
 current_user 
--------------
 myusername
(1 row)

如果要使用user作为表名,则因为它是一个保留的单词,您必须引用标识符,例如:

SELECT id FROM "user";

您的ORM应该引用所有标识符或至少保留的单词.否则是您的ORM中的一个错误.您可以使用非保留单词作为表名称来解决ORM错误.

我认为psql中有点疣,它​​会自动引用您传递给BackSlash命令的标识符.因此,\d user将起作用,但select * from user却不会.您必须写\d "user".在\d MyTable起作用的情况下,出现了同样的问题,但SELECT * FROM MyTable行不通,您必须写SELECT * FROM "MyTable".


在错误中给出有关此消息的HINT消息.不幸的是,解析器和规划师在"不存在"错误时实际上没有足够的信息来知道您最初写了一个关键字,它所看到的只是该点的函数扫描.

其他推荐答案

用特殊字符定义表名称,因为某些表像用户,PostgreSQL看起来像系统表. 而是"用户"写" user".

  • @orm \ table(name ="用户") 添加
  • @orm \ table(name =" user")

本文地址:https://www.itbaoku.cn/post/1764033.html