我为 Doctrine 创建了 yaml 配置。当我尝试doctrine orm:generate-entities
时,它会创建带有 getter 和 setter 的 php 文件。因此,is_public
字段转换为setIsPublic
方法getIsPublic
。真可惜。我怎样才能得到set_is_public
和get_is_public
?我可以手动编辑生成的 php 文件,但我不知道更改架构时会发生什么。
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
Symfony 的编码标准鼓励 Symfony 用户使用camelCase:
命名约定
对变量、函数和方法名称、参数使用驼峰命名法,而不是下划线
个人建议 - 不要通过学说 orm:generate-entities 生成实体。
使用纯 PHP 创建类。为什么?
Orm 使用对私有的反射来与数据库通信。您不需要生成 setter 和 getter。我建议您使用工厂或构造函数等设计模式来实现您的目标。装饰器也应该工作正常。
<?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 private var to snake_case列名。如果您想以其他方式更改它,请考虑:其他命名策略