Я создал конфигурацию yaml для Doctrine. Когда я пытаюсь doctrine orm:generate-entities, он создает файлы php с геттерами и сеттерами в случае верблюда. Итак, поле is_public трансформируется в методы setIsPublic и getIsPublic. Это ужасно. Как я могу получить set_is_public и get_is_public? Я могу вручную редактировать сгенерированные файлы php, но я не знаю, что произойдет, когда я изменю схему.
Doctrine 2 ORM создает классы с ненавистным CamelCase
Ответы (3)
Вы можете выбрать стратегию именования. который 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
name="user_id" в вашем @ORM\Column annotation
- person A.L; 28.07.2016
@ORM\Column, которую можно было бы использовать только при необходимости, без изменения глобальной стратегии именования.
- person A.L; 28.07.2016
стандарты кодирования Symfony призывают пользователей Symfony использовать верблюжий регистр:
Соглашения об именах
Используйте camelCase, а не символы подчеркивания, для имен переменных, функций и методов, аргументов.
name="user_id" в вашей аннотации @ORM\Column.
- person aalaap; 28.07.2016
Личный совет - не генерируйте сущности по доктрине orm:generate-entities.
Используйте простой 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. Если вы хотите изменить его иначе, подумайте: другие стратегии именования