2016-12-01 46 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