2016-12-01 22 views
2

У меня есть сущность, сгенерированная с использованием доктрины в командной строке. Это, как показано ниже -как сделать доктрину сгенерированное имя столбца для отображения в верблюжьем футляре в доктрине 2 symfony?

/** 
* @var string 
* 
* @ORM\Column(name="COUNTRY_ID", type="string", length=2) 
*/ 
private $cOUNTRYID; 

В базе данных имя столбца COUNTRY_ID и результат SQL даст доц. массив с COUNTRY_ID как ключ и его имя как значение.

Мое требование состоит в том, чтобы иметь отображаемое имя результата SQL для верблюжьего случая. например, COUNTRY_ID должно быть countryId. Есть ли какая-либо конфигурация, доступная в файле доктрины, для этого ?.

+0

Можете ли вы c/p ваш запрос? –

+0

Что именно вы имеете в виду * отображаемое имя результата SQL *? – Wilt

+0

в порядке. Я объясню более подробно. Моя сущность «TFixed.php» и имеет контент, как показано ниже. 'namespace RestBundle \ Entity; Использование Doctrine \ ORM \ Отображение как ORM; /** * TFixedFees * * @ORM \ Table() * @ORM \ Entity (repositoryClass = "RestBundle \ Entity \ TFixedRepository") */ класс TFixed { /** * @var целого * * @ORM \ Column (имя = "USER_ID", типа = "целое число") */ частного $ USERID; ' и когда я делаю какой-либо SQL-запрос, его результат массив будет иметь' { 'USER_ID': '67637673'} '. Но мне нужен был результат в верблюжьем деле. –

ответ

3

Вы должны реализовать стратегию именования, чтобы получить имена автогенерируемых имен camelCase, такие как explained in Doctrine documentation.

сделать класс, чтобы получить имя верблюжьего для имен столбцов, CamelCaseNamingStrategy.php:

<?php 
class CamelCaseNamingStrategy implements NamingStrategy 
{ 
    public function classToTableName($className) 
    { 
     return 'cc_' . substr($className, strrpos($className, '\\') + 1); 
    } 
    public function propertyToColumnName($propertyName) 
    { 
     return $propertyName; 
    } 
    public function referenceColumnName() 
    { 
     return 'id'; 
    } 
    public function joinColumnName($propertyName, $className = null) 
    { 
     return strtolower($propertyName) . ucwords($this->referenceColumnName()); 
    } 
    public function joinTableName($sourceEntity, $targetEntity, $propertyName = null) 
    { 
     return strtolower($this->classToTableName($sourceEntity)) . ucwords($this->classToTableName($targetEntity)); 
    } 
    public function joinKeyColumnName($entityName, $referencedColumnName = null) 
    { 
     return strtolower($this->classToTableName($entityName)) . ($referencedColumnName ?: ucwords($this->referenceColumnName())); 
    } 
} 

Затем зарегистрировать новый класс как сервис, и добавить его в config.yml:

orm: 
    #... 
    entity_managers: 
     default 
      naming_strategy: my_bundle.camel_case_naming_strategy.default 
+0

Я думаю, что OP генерирует свои сущности (имена свойств) из существующей базы данных.Есть ли возможность установить somthing как 'columnNameToProperty' с стратегией именования? – Wilt

+0

@ Не уверен в этом, я все еще думаю, что это касается получения имен столбцов camelCase в финале. По вашему вопросу, я думаю, что это сделало бы трюк: http://symfony.com/doc/current/doctrine/reverse_engineering.html (не задумываясь о стратегии именования.) – Veve

0

Если вы имеете в виду с отображаемым именем имя класса свойств, то вы можете сделать это следующим образом:

/** 
* @var string 
* 
* @ORM\Column(name="COUNTRY_ID", type="string", length=2) 
*/ 
private $countryId; 

name="COUNTRY_ID" в вашем определении столбца является имя столбца, который использует доктрину, чтобы найти его в таблице (имя столбца таблицы).

Имя свойства $countryId - это имя свойства, которое Doctrine использует для привязки результата запроса. Поэтому, если вы хотите, чтобы свойство класса находилось в верблюжьем корпусе, вам просто нужно объявить имя свойства верблюда.

+0

Спасибо. Но имена свойств все сгенерированы автоматически. Любая идея, как установить его для создания в camelcase ?. –

+0

@ManojKumar Если вы измените имя таблицы 'COUNTRY_ID' на' country_id', она станет похожей на верблюд, как вы хотите. Это возможно или вы не можете изменить имена таблиц? – Wilt

+0

В противном случае вы могли бы, возможно, прочитать [документацию Doctrine по ** Реализация NamingStrategy **] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/namingstrategy.html), если вы можете найти решение там ... – Wilt