如何使学说生成的列名显示在学说 2 symfony 中的驼峰式大小写中?
how to make doctrine generated column name to display in camel case in doctrine 2 symfony?
我有一个在命令行中使用学说生成的实体。如下-
/**
* @var string
*
* @ORM\Column(name="COUNTRY_ID", type="string", length=2)
*/
private $cOUNTRYID;
在数据库中,列名是 COUNTRY_ID
,SQL 结果将给出 assoc。以 COUNTRY_ID
为键,其名称为值的数组。
我的要求是 SQL 结果的显示名称为驼峰式。例如 COUNTRY_ID
应该是 countryId
。学说文件中是否有可用的配置来执行此操作?
如果您的显示名称是 class 属性 名称,那么您可以这样做:
/**
* @var string
*
* @ORM\Column(name="COUNTRY_ID", type="string", length=2)
*/
private $countryId;
列定义中的 name="COUNTRY_ID"
是学说用来在 table 中找到它的列名(table 列名)。
属性 名称 $countryId
是 Doctrine 用来绑定查询结果的 属性 的名称。因此,如果您希望 class 属性 为驼峰式,您只需声明 属性 名称为驼峰式。
您必须实施命名策略才能获得驼峰式自动生成的列名称,如 explained in Doctrine documentation。
创建一个 class 以获取您的列名称的驼峰命名,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()));
}
}
然后将这个新的 class 注册为服务,并将其添加到您的 config.yml:
orm:
#...
entity_managers:
default
naming_strategy: my_bundle.camel_case_naming_strategy.default
我有一个在命令行中使用学说生成的实体。如下-
/**
* @var string
*
* @ORM\Column(name="COUNTRY_ID", type="string", length=2)
*/
private $cOUNTRYID;
在数据库中,列名是 COUNTRY_ID
,SQL 结果将给出 assoc。以 COUNTRY_ID
为键,其名称为值的数组。
我的要求是 SQL 结果的显示名称为驼峰式。例如 COUNTRY_ID
应该是 countryId
。学说文件中是否有可用的配置来执行此操作?
如果您的显示名称是 class 属性 名称,那么您可以这样做:
/**
* @var string
*
* @ORM\Column(name="COUNTRY_ID", type="string", length=2)
*/
private $countryId;
列定义中的 name="COUNTRY_ID"
是学说用来在 table 中找到它的列名(table 列名)。
属性 名称 $countryId
是 Doctrine 用来绑定查询结果的 属性 的名称。因此,如果您希望 class 属性 为驼峰式,您只需声明 属性 名称为驼峰式。
您必须实施命名策略才能获得驼峰式自动生成的列名称,如 explained in Doctrine documentation。
创建一个 class 以获取您的列名称的驼峰命名,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()));
}
}
然后将这个新的 class 注册为服务,并将其添加到您的 config.yml:
orm:
#...
entity_managers:
default
naming_strategy: my_bundle.camel_case_naming_strategy.default