Doctrine 2 ORM создает классы с ненавистным CamelCase - PullRequest
3 голосов
/ 27 сентября 2011

Я создал конфигурацию yaml для Doctrine. Когда я пытаюсь doctrine orm:generate-entities, он создает файлы php с геттерами и сеттерами в случае верблюда. Таким образом, поле is_public преобразуется в методы setIsPublic и getIsPublic. Это должно. Как я могу получить set_is_public и get_is_public? Я могу вручную редактировать сгенерированные файлы php, но я не знаю, что произойдет, когда я изменю схему.

Ответы [ 3 ]

3 голосов
/ 28 июля 2016

Вы можете выбрать стратегию именования , которую Doctrine будет использовать для генерации элементов, используя:

Используя стратегию именования, вы можете предоставить правила для автоматической генерации идентификаторов базы данных, столбцов иимена таблиц, когда имя таблицы / столбца не указано.Эта функция помогает уменьшить детализацию документа сопоставления, устраняя повторяющиеся помехи (например, TABLE _).

В вашем конкретном случае, я думаю, вы смотрите на что-то вроде:

$namingStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_LOWER);
$configuration()->setNamingStrategy($namingStrategy);

В связанной теме рассказывается, как написать собственную стратегию именования.

Если вы используете Symfony, еще проще (как в большинстве случаев с Symfony, но это только мое мнение) через config.yml:

doctrine:
    orm:
        naming_strategy: doctrine.orm.naming_strategy.underscore
1 голос
/ 07 ноября 2013

Стандарты кодирования Symfony поощряют пользователей Symfony использовать camelCase :

Соглашения об именах

Использование camelCase, не подчеркивания, для переменной, имена функций и методов, аргументы

0 голосов
/ 13 июня 2018

Персональный совет - не генерируйте сущности по доктрине orm: generate-entity.Используйте простой PHP для создания класса.Зачем?Orm использует отражение на рядовых для связи с базой данных.Вам не нужно создавать сеттеры и геттеры.Я рекомендую Вам использовать шаблоны проектирования, такие как фабрика или конструктор, для достижения Вашей цели.Декораторы тоже должны нормально работать.

<?php

class MyClass
{
    private $id;
    private $name;

    public function __construct(int $id, string $name)
    {
        $this->id = $id;
        $this->name = $name;
    }
}

$ camelCase - это не только рекомендация Symfony для стандартного кода.Он основан на PSR2.Я настоятельно рекомендую использовать PSR2, код становится чистым и стандартизированным.Стандартная стратегия именования ORM: $ camelCase приватная переменная для snake_case имя столбца.Если вы хотите изменить это в противном случае, рассмотрите: другие именования состояний

...