2016-04-24 4 views
2

У меня есть лицо класса:доктрины в не генерирует запрос правильно

/** 
* @ORM\Entity 
* @ORM\Table(name="""app_auth"".""User""", schema="app_auth") 
*/ 
class User { 
    /** 
    * @ORM\Column(type="string") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $username; 

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

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

    // removed setters and getters 
} 

который прекрасно привязанный к БД. На самом деле, этот контроллер работает, как ожидалось:

/** 
* @Route("users/{username}", 
*  defaults={ 
*  "_format" = "json" 
*  }) 
* @Method("GET") 
*/ 
public function getUserAction($username) 
{ 
    $user = $this->getDoctrine() 
     ->getRepository('BelkaTestBundle:User') 
     ->find($username); 

    if(!$user) 
     throw $this->createNotFoundException("User $username not found"); 

    $res = new JsonResponse(); 
    $res->setData(array(
     'user' => $user->getUsername(), 
     'email' => $user->getEmail())); 

    return $res; 
} 

Но если я пытаюсь запросить с помощью DQL, как это:

/** 
* @Route("users/{username}", 
*  defaults={ 
*  "_format" = "json", 
*  }) 
* @Method("GET") 
*/ 
public function getUserAction($username) 
{ 
    $repository = $this->getDoctrine() 
      ->getRepository('BelkaTestBundle:User'); 
    $query = $repository->createQueryBuilder('u'); 
    $users = $query->getResult(); 

    /*something here to manage and return the results*/ 
    return $res; 
} 

Что я получаю сообщение об ошибке Symfony:

An exception occurred while executing 'SELECT "0_.username AS username0, "0_.email AS email1, "0_.password AS password2 FROM "app_auth"."User" "0_': 

SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "0" 
LINE 1: SELECT "0_.username AS username0, "0_.email AS email1, "0_.p... 

По команде var_dumping $query->getResult() я получил следующий запрос, который выглядит плохо: цитируется:

SELECT "0_.username AS username0, "0_.email AS email1, "0_.password AS password2 FROM "app_auth"."User" "0_ 

Уведомление Я использую имя схемы для своего объекта . Я не могу понять, что не так с моим DQL. Любая помощь? Я использую Symfony 2.8 LTS

+0

Просто идея: имя таблицы в аннотации не должно быть без схемы? Поэтому вместо 'name =" "" app_auth "". "" Пользователь "" "" использовать 'name =" User "'? – Miro

+0

К сожалению, это обходное решение для других проблем, связанных с Доктриной. Таким образом, имя схемы и имя таблицы с учетом регистра управляются правильно – Bertuz

+0

@Miro u сделал мой день! Удаляя кавычки из имени схемы и сохраняя их только для имени таблицы, запрос генерируется правильно. Хотелось бы вам ответить на это, чтобы я принял его? – Bertuz

ответ

0

При цитировании имя таблицы и оставить имя схемы без кавычек:

* @ORM\Table(name="app_auth.""User""", schema="app_auth") 
+0

Нет, это '* @ORM \ Table (name =" app_auth. "" Пользователь "" ", schema =" app_auth ")';) – Bertuz

+0

О, я вижу ... ваша таблица имеет имя «Пользователь» (с кавычками) ? это ... не так часто. – Miro

+0

правильный! Имя моей таблицы - «Пользователь», который остается в схеме «app_auth». Проблема заключается в верхнем регистре 'U', поскольку postgres чувствителен к регистру. Чтобы сообщить Doctrine, что имя таблицы чувствительно к регистру, вы можете указать ее. К сожалению, цитирование схемы не работает, но мне она не нужна, поэтому я удалил кавычки частью схемы – Bertuz