У меня обычный класс User с атрибутом только id работал очень хорошо, когда я использовал MySQL. С тех пор, как я перешел на Postgresql, у меня возникло много проблем.
Позвольте мне сначала дать вам обзор моего приложения, его ГИС в сети, я поместил файл TSV и с помощью созданного мной скрипта php он читает файл TSV и сохраняет свои данные в базе данных. Затем Geoserver считывает данные и передает их моей карте листовок. Так что Postgresql действительно важен, поскольку Geoserver не поддерживает MySQL.
Сначала я создал базу данных и ее схему с помощью инструмента командной строки. До сих пор все в порядке, но когда я попытался использовать командную строку для создания пользователя, он выдает синтаксическую ошибку SQLSTATE [42601]:
In AbstractPostgreSQLDriver.php line 70:
An exception occurred while executing 'INSERT INTO user (username, username_canonical, emai
l, email_canonical, enabled, salt, password, last_login, confirmation_token, password_reque
sted_at, roles, id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["admin", "adm
in", "[email protected]", "[email protected]", 1, null, "$2y$13$rS4j9aDRRpKMA2ge3QoDNuhmCWD
9cO9Cmnzv/PxqUmBxSximXcFZu", null, null, null, "a:0:{}", 1]:
SQLSTATE[42601]: Syntax error: 7 ERREUR: erreur de syntaxe sur ou près de « user »
LINE 1: INSERT INTO user (username, username_canonical, email, email...
^
In PDOStatement.php line 107:
SQLSTATE[42601]: Syntax error: 7 ERREUR: erreur de syntaxe sur ou près de « user »
LINE 1: INSERT INTO user (username, username_canonical, email, email...
^
In PDOStatement.php line 105:
SQLSTATE[42601]: Syntax error: 7 ERREUR: erreur de syntaxe sur ou près de « user »
LINE 1: INSERT INTO user (username, username_canonical, email, email...
^
Sorry about the french sentence it says basicly error of syntax on or near << user >>
Это не единственная проблема, которую я получил, после того, как этот способ не сработал, я попытался использовать форму регистрации:
An exception occurred while executing 'SELECT t0.username AS username_1, t0.username_canonical AS username_canonical_2, t0.email AS email_3, t0.email_canonical AS email_canonical_4, t0.enabled AS enabled_5, t0.salt AS salt_6, t0.password AS password_7, t0.last_login AS last_login_8, t0.confirmation_token AS confirmation_token_9, t0.password_requested_at AS password_requested_at_10, t0.roles AS roles_11, t0.id AS id_12 FROM user t0 WHERE t0.username_canonical = ?' with params ["user"]:
SQLSTATE[42703]: Undefined column: 7 ERREUR: la colonne t0.username n'existe pas
LINE 1: SELECT t0.username AS username_1, t0.username_canonical AS u...
^
Даже я пытался вручную ввести пользователя в базу данных, но когда я пытаюсь войти:
Authentication request could not be processed due to a system problem.
Я не знаю, работают ли другие созданные мной Сущности или нет, потому что я не могу войти в панель администратора, чтобы использовать их.
<?php
namespace AdminBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use SbS\AdminLTEBundle\Model\UserInterface as ThemeUser;
use Doctrine\ORM\Mapping as ORM;
/**
* Class User
* @package AdminBundle\Entity
* @ORM\Entity
* @ORM\Table(name = "user")
*/
class User extends BaseUser implements ThemeUser
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
}
/**
* Get Id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set Id
*
* @param int $id
*
* @return User
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Should return FirstName and LastName
* @return string
*/
public function getName()
{
}
/**
* Should return path to avatar. See Twig User Extension.
* @return string
*/
public function getAvatar()
{
}
/**
* Should return Date of Registration
* @return mixed
*/
public function getMemberSince()
{
}
/**
* Should return Description (can be role, group or etc.)
* @return string
*/
public function getTitle()
{
}
/**
* Can return Additional Info
* @return mixed
*/
public function getInfo()
{
}
}
ThemeUser is an interface of an admin bundle that i am using, i just implemented it to have the bundle fonctionality. It didnt have any issue when i was using MySQL. I even didnt fill the methods cuz i dont need them.
Column Type Comment
id integer
username varchar(180)
username_canonical varchar(180)
email varchar(180)
email_canonical varchar(180)
enabled boolean
salt varchar(255) NULL
password varchar(255)
last_login timestamp(0) NULL
confirmation_token varchar(180) NULL
password_requested_at timestamp(0) NULL
roles text (DC2Type:array)
с другой стороны, ваш запрос выбора говорит, что столбец имени пользователя не существует. пожалуйста, предоставьте вам сущность и схему таблицы
Уважаемый Денис Алинав, я только что добавил пользователя класса и схему таблицы, жду помощи, спасибо.






"user" - зарезервированное ключевое слово в postgreSQL, вам следует изменить имя своей таблицы на другое или добавить символ "` "(обратная кавычка)
`user`
https://www.postgresql.org/docs/current/static/sql-keywords-appendix.html
изменить @ORM\Table(name = "user") на @ORM\Table(name = "`user`") в сущности
Сработало очень хорошо Спасибо большое! Все, что мне нужно было сделать, это изменить имя таблицы в аннотациях доктрины.
Да, все официальные документы и примеры используют сущность «Пользователь» с именем таблицы «пользователь», и, таким образом, любой, кто пытается реализовать официальный пример, столкнется с той же проблемой. Спасибо за публикацию исправления, но может быть хорошо, чтобы примеры Symfony не конфликтовали с пространством имен по умолчанию.
Также - это может быть причиной не использовать user в качестве имени таблицы. Были ли у вас проблемы с этим где-нибудь?
вы вставляете идентификатор в запрос. но каково определение идентификатора столбца в схеме и свойства идентификатора в сущности?