Как заставить доктрину игнорировать префиксы столбцов базы данных? - PullRequest
0 голосов
/ 11 августа 2011

Обычно я создаю свои сущности в 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

как я могу игнорировать префиксы моих столбцов? мне нужно изменить имена столбцов всей базы данных?

Ответы [ 3 ]

2 голосов
/ 11 августа 2011

Я думаю, вы можете добавить имя так:

Doctrine\Tests\ORM\Mapping\User:
    fields:
        created:
            name: dt_created
            type: datetime

Вы видите:

2 голосов
/ 31 марта 2012

Вы можете установить исправление Doctrine для удаления префиксов при обратном инжиниринге вашей базы данных.

  1. Открыть этот файл в IDE: https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php
  2. Добавить метод к class DatabaseDriver implements Driver:

    private function deprefixFieldName( $fieldName ) {
        return implode('_',array_slice(explode('_',$fieldName),1));
    }
    
  3. Способ редактирования:

    public function setFieldNameForColumn($tableName, $columnName, $fieldName)
    {
        /* ADD */ $fieldName = $this->deprefixFieldName($fieldName);
        $this->fieldNamesForColumns[$tableName][$columnName] = $fieldName;
    }
    
  4. Способ редактирования:

    private function getFieldNameForColumn($tableName, $columnName, $fk = false)
    {
        /* ... */
        /* ADD */ $columnName = $this->deprefixFieldName($columnName);
        return Inflector::camelize($columnName);
    }
    

Мой метод очень прост, потому что все мои префиксы согласованы (я взял идею из Media Wiki), ваш может быть более сложным.

Вот фактический патч, взятый Git из рабочей системы, на всякий случай, если ясделал опечатку в описании: http://pastebin.com/FHeTCUjZ (интересно, разрешены ли патчи в постах).

1 голос
/ 11 августа 2011

Как я понимаю, вы хотите, чтобы имя столбца вашей базы данных было id_user, а свойство сущности - $user? Если это так, я не думаю, что это возможно без серьезного взлома основных библиотек. По сути, вам нужно перехватить часть, которая генерирует свойства сущности, и добавить свои собственные правила их именования. Тебе было бы намного лучше переименовать свои колонки. ИМХО, эти префиксы не нужны. Я бы изменил id_user на user_id, nm_name на name, dt_created на created_at и bl_active на is_active. Ваши имена столбцов и имена свойств будут не только совпадать (это хорошо), но и будут иметь больше смысла.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...