2016-12-01 50 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',它的內容如下。 '命名空間RestBundle \ Entity; 使用Doctrine \ ORM \ Mapping作爲ORM; /** * TFixedFees * * @ORM \表() * @ORM \實體(repositoryClass = 「RestBundle \實體\ TFixedRepository」) */ 類TFixed { /** * @var整數 * * @ORM \列(名稱= 「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從現有的數據庫中生成他的實體(屬性名稱)。是否有可能使用命名策略設置類似'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

否則,您可以閱讀[關於**實現NamingStrategy的Doctrine文檔](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/namingstrategy.html)if你可以找到一個解決方案... – Wilt