Doctrine 2 ORM 使用可恶的 CamelCase 创建类

发布于 2024-12-06 23:04:27 字数 299 浏览 4 评论 0原文

我为 Doctrine 创建了 yaml 配置。当我尝试使用 doctrine orm:generate-entities 时,它会创建带有驼峰式大小写的 getter 和 setter 的 php 文件。因此,is_public 字段转换为 setIsPublicgetIsPublic 方法。真是太糟糕了。如何获取 set_is_publicget_is_public?我可以手动编辑生成的 php 文件,但我不知道更改架构时会发生什么。

I created yaml configuration for Doctrine. When I'm trying doctrine orm:generate-entities, it creates php files with getters and setters in camel case. So, is_public field transforms into setIsPublic and getIsPublic methods. It's owful. How can I get set_is_public and get_is_public? I can manually edit generated php files, but I don't know what will happen when I change the schema.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

层林尽染 2024-12-13 23:04:27

您可以选择命名策略该 Doctrine 将用于使用以下方式生成项目:

使用命名策略,您可以自动提供规则
生成数据库标识符、列和表名称
未给出表/列名称。此功能有助于减少
映射文档的冗长性,消除重复的噪音(例如:
表_)。

对于您的具体情况,我认为您正在查看类似的内容:

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

链接的主题继续向您展示如何编写自己的自定义命名策略。

如果您使用 Symfony,则为 甚至更容易(就像大多数事情都是用 Symfony 实现的,但这只是我的意见)通过 config.yml

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

You can choose a naming strategy that Doctrine will use to generate the items using:

Using a naming strategy you can provide rules for automatically
generating database identifiers, columns and tables names when the
table/column name is not given. This feature helps reduce the
verbosity of the mapping document, eliminating repetitive noise (eg:
TABLE_).

For your specific case, I think you're looking at something like:

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

The linked topic goes on to show you how you can write your own custom naming strategy.

If you're using Symfony, it's even easier (like most things are with Symfony, but that's just my opinion) via config.yml:

doctrine:
    orm:
        naming_strategy: doctrine.orm.naming_strategy.underscore
不再让梦枯萎 2024-12-13 23:04:27

Symfony 的编码标准鼓励 Symfony 用户使用驼峰式命名法:

命名约定

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

Symfony's coding standards encourage Symfony users to use camelCase:

Naming Conventions

Use camelCase, not underscores, for variable,
function and method names, arguments

眼前雾蒙蒙 2024-12-13 23:04:27

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

Personal advice - do not generate entities by doctrine orm:generate-entities.
Use plain PHP to create class. Why?
Orm uses reflection on privates to communicate with database. You dont need to generate setters and getters. I recomend You to use design patterns such as factory or constructor to achive Your goal. Decorators also should work fine.

<?php

class MyClass
{
    private $id;
    private $name;

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

$camelCase is not only Symfony's recomendation for code standard. It's based on PSR2. I highly recomend using PSR2, code gets clean and standarized.
Standard ORM naming strategy is $camelCase private var to snake_case column name. If you want to change it otherwise, consider: other naming stategies

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文