Doctrine 如何使条令忽略数据库列前缀?

Doctrine 如何使条令忽略数据库列前缀?,doctrine,symfony,Doctrine,Symfony,通常,我在此控制台命令中在symfony2/doctrine中创建实体: $php app/console doctrine:mapping:import TestSiteBundle yml $php app/console doctrine:generate:entities Test --path=src/ 但是我的表列有如下前缀: table: user id_user id_address (FK) nm_name dt_created bl_active $idUser $idA

通常,我在此控制台命令中在symfony2/doctrine中创建实体:

$php app/console doctrine:mapping:import TestSiteBundle yml
$php app/console doctrine:generate:entities Test --path=src/
但是我的表列有如下前缀:

table: user
id_user
id_address (FK)
nm_name
dt_created
bl_active
$idUser
$idAdress
$nmName
$dtCreated
$blActive
它生成如下实体:

table: user
id_user
id_address (FK)
nm_name
dt_created
bl_active
$idUser
$idAdress
$nmName
$dtCreated
$blActive

如何忽略列前缀?我需要更改整个数据库列名吗?

我明白了,您希望数据库列名为
id\u user
,实体属性为
$user
?如果是这样的话,我认为如果不对核心库进行严重的黑客攻击,这是不可能的。基本上,您需要截取生成实体属性的部分,并添加您自己关于如何命名它们的规则。您最好重命名您的列。嗯,那些前缀是不必要的。我会将
id\u user
更改为
user\u id
nm\u name
更改为
name
dt\u created
更改为
created\u at
bl\u active
更改为
处于活动状态。列名和属性名不仅匹配(这是一件好事),而且更有意义


希望这能有所帮助。

据我所知,您希望数据库列名为
id\u user
,实体属性为
$user
?如果是这样的话,我认为如果不对核心库进行严重的黑客攻击,这是不可能的。基本上,您需要截取生成实体属性的部分,并添加您自己关于如何命名它们的规则。您最好重命名您的列。嗯,那些前缀是不必要的。我会将
id\u user
更改为
user\u id
nm\u name
更改为
name
dt\u created
更改为
created\u at
bl\u active
更改为
处于活动状态。列名和属性名不仅匹配(这是一件好事),而且更有意义


希望这能有所帮助。

我想你可以加上这样的名字:

Doctrine\Tests\ORM\Mapping\User:
    fields:
        created:
            name: dt_created
            type: datetime
你可以看到:


我认为您可以添加如下名称:

Doctrine\Tests\ORM\Mapping\User:
    fields:
        created:
            name: dt_created
            type: datetime
你可以看到:


您可以在对数据库进行反向工程时修补规则以去除前缀

  • 在IDE中打开此文件:
  • 将方法添加到
    类数据库驱动程序实现驱动程序

    private function deprefixFieldName( $fieldName ) {
        return implode('_',array_slice(explode('_',$fieldName),1));
    }
    
  • 编辑方法:

    public function setFieldNameForColumn($tableName, $columnName, $fieldName)
    {
        /* ADD */ $fieldName = $this->deprefixFieldName($fieldName);
        $this->fieldNamesForColumns[$tableName][$columnName] = $fieldName;
    }
    
    private function getFieldNameForColumn($tableName, $columnName, $fk = false)
    {
        /* ... */
        /* ADD */ $columnName = $this->deprefixFieldName($columnName);
        return Inflector::camelize($columnName);
    }
    
  • 编辑方法:

    public function setFieldNameForColumn($tableName, $columnName, $fieldName)
    {
        /* ADD */ $fieldName = $this->deprefixFieldName($fieldName);
        $this->fieldNamesForColumns[$tableName][$columnName] = $fieldName;
    }
    
    private function getFieldNameForColumn($tableName, $columnName, $fk = false)
    {
        /* ... */
        /* ADD */ $columnName = $this->deprefixFieldName($columnName);
        return Inflector::camelize($columnName);
    }
    
  • 我的方法很简单,因为我的前缀都是一致的(我从Media Wiki中得到了这个想法),而你的方法可能更复杂


    这是Git从工作系统中获取的实际补丁,以防我在描述中输入错误:(我想知道帖子中是否允许使用补丁)。

    您可以在数据库反向工程时使用补丁删除前缀

  • 在IDE中打开此文件:
  • 将方法添加到
    类数据库驱动程序实现驱动程序

    private function deprefixFieldName( $fieldName ) {
        return implode('_',array_slice(explode('_',$fieldName),1));
    }
    
  • 编辑方法:

    public function setFieldNameForColumn($tableName, $columnName, $fieldName)
    {
        /* ADD */ $fieldName = $this->deprefixFieldName($fieldName);
        $this->fieldNamesForColumns[$tableName][$columnName] = $fieldName;
    }
    
    private function getFieldNameForColumn($tableName, $columnName, $fk = false)
    {
        /* ... */
        /* ADD */ $columnName = $this->deprefixFieldName($columnName);
        return Inflector::camelize($columnName);
    }
    
  • 编辑方法:

    public function setFieldNameForColumn($tableName, $columnName, $fieldName)
    {
        /* ADD */ $fieldName = $this->deprefixFieldName($fieldName);
        $this->fieldNamesForColumns[$tableName][$columnName] = $fieldName;
    }
    
    private function getFieldNameForColumn($tableName, $columnName, $fk = false)
    {
        /* ... */
        /* ADD */ $columnName = $this->deprefixFieldName($columnName);
        return Inflector::camelize($columnName);
    }
    
  • 我的方法很简单,因为我的前缀都是一致的(我从Media Wiki中得到了这个想法),而你的方法可能更复杂


    这是Git从工作系统中获取的实际补丁,以防我在描述中输入错误:(我想知道是否允许在POST中使用补丁)。

    或者,在生成实体之前,编辑配置文件,该文件将
    原则:映射:导入
    转储?或者,在生成实体之前,编辑
    doctor:mapping:import
    转储的配置文件?