4

我为 Doctrine 创建了 yaml 配置。当我尝试doctrine orm:generate-entities时,它会创建带有 getter 和 setter 的 php 文件。因此,is_public字段转换为setIsPublic方法getIsPublic。真可惜。我怎样才能得到set_is_publicget_is_public?我可以手动编辑生成的 php 文件,但我不知道更改架构时会发生什么。

4

3 回答 3

4

您可以选择一个命名策略,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
于 2016-07-28T10:59:38.110 回答
3

Symfony 的编码标准鼓励 Symfony 用户使用camelCase

命名约定

对变量、函数和方法名称、参数使用驼峰命名法,而不是下划线

于 2013-11-07T15:55:08.333 回答
0

个人建议 - 不要通过学说 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列名。如果您想以其他方式更改它,请考虑:其他命名策略

于 2018-06-13T04:50:37.877 回答