Doctrine orm 条令2 ORM用可恨的骆驼案例创造职业

Doctrine orm 条令2 ORM用可恨的骆驼案例创造职业,doctrine-orm,getter-setter,camelcasing,Doctrine Orm,Getter Setter,Camelcasing,我为条令创建了yaml配置。当我尝试orm:generate entities时,它会在camel case中使用getter和setter创建php文件。因此,is_public字段转换为setIsPublic和getIsPublic方法。太多了。如何获取set\u is\u public和get\u is\u public?我可以手动编辑生成的php文件,但我不知道当我更改模式时会发生什么 鼓励Symfony用户使用camelCase: 命名约定 变量使用CAMELLCASE,而不是下划线,

我为条令创建了yaml配置。当我尝试
orm:generate entities
时,它会在camel case中使用getter和setter创建php文件。因此,
is_public
字段转换为
setIsPublic
getIsPublic
方法。太多了。如何获取
set\u is\u public
get\u is\u public
?我可以手动编辑生成的php文件,但我不知道当我更改模式时会发生什么

鼓励Symfony用户使用camelCase:

命名约定 变量使用CAMELLCASE,而不是下划线, 函数和方法名称、参数

您可以使用该条令生成项目,使用:

使用命名策略,您可以自动为 当 未给出表/列名。此功能有助于降低成本 映射文档的详细性,消除重复噪音(例如: 表11)

对于您的具体案例,我认为您看到的是:

$namingStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_LOWER);
$configuration()->setNamingStrategy($namingStrategy);
链接主题继续向您展示如何编写自己的自定义命名策略

如果您使用的是Symfony,则可以通过
config.yml

doctrine:
    orm:
        naming_strategy: doctrine.orm.naming_strategy.underscore

个人建议-不要根据原则生成实体orm:生成实体
使用普通PHP创建类。为什么?
Orm使用士兵的反射与数据库通信。您不需要生成setter和getter。我建议您使用诸如工厂或构造函数之类的设计模式来实现您的目标。装饰师也应该工作得很好

<?php

class MyClass
{
    private $id;
    private $name;

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

我不得不承认,您对方法命名的看法并不常见。考虑到您的平台(PHP)本身对内置对象使用camelCased方法名,您肯定是在违反规则。然而,这是一个有趣的问题,所以我对它投了更高的票(取消了其他一些可恨的否决票)。这不是一个条令编码标准规则——这是Symfony的。该原则似乎并没有对变量名强制执行特定的案例,但是,考虑到它最终是PHP,camel案例是一个不错的选择。请注意,当您的表列名使用下划线时,使用驼峰大小写需要在
@ORM\column
注释中添加一个
name=“user\u id”
参数。@aalaap谢谢,我不知道为什么我写这是一个原则,而我引用并链接了Symfony文档。我将更新我的答案。@aalaap请随意添加与您的评论内容相同的答案。我的回答离题了,是的。太糟糕了,OP可能永远也看不到这一点。也许你应该添加…使用下划线将需要额外的
name=“user\u id”
您的
@ORM\Column注释中的参数
我的理解是,告诉条令使用特定的命名策略将消除您自己显式建立变量与列名关系的需要。Doctrine知道该怎么做,因为您已经告诉它了。我认为提供替代的
@ORM\Column
注释是很有趣的,该注释只在需要时使用,而不需要修改全局命名策略。