@HellWalk

Как указать доктрине, какой неймспейс использовать?

Ошибка проста - доктрина делает запрос:
SELECT t0.id AS id_1, t0.name AS name_2, t0.mentor_id AS mentor_id_3 FROM user t0

И получает ошибку:
[42703] ERROR: column t0.id does not exist

Если добавить неймспейс public:
SELECT t0.id AS id_1, t0.name AS name_2, t0.mentor_id AS mentor_id_3 FROM public.user t0

Все работает нормально.
Соответственно вопрос - где и как указать доктрине неймспейс?

doctrine.yaml
doctrine:
    dbal:
        driver:   pdo_pgsql
        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App


.env
DATABASE_URL=pgsql://myuser:mypass@localhost:5432/mydb


entity/User.php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\ORM\Mapping\OneToOne;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @OneToOne(targetEntity="User")
     * @JoinColumn(name="mentor_id", referencedColumnName="id", nullable=true)
     */
    private $mentor;

    //...
}
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Слово namespace здесь неверно.
Ищите по schema name и конкретно search_path

Странно что вы не знаете что такое search_path, но он у вас модифицирован. В дефолтную настройку схема public включена и потому оба ваших запроса обычно делают одно и то же.

В доктрине начиная с 2.5 схема указывается так:
/**
 * Clerk
 *
 * @Table(schema="schema")
 */
class Clerk { }

Не уверен что будет работать для public схемы если доктрина предполагает что оно в search_path есть и так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы