【问题标题】:How to get doctrine to generate sql with BIGINT type?如何让教义生成 BIGINT 类型的 sql?
【发布时间】:2023-03-23 05:27:01
【问题描述】:

在我的架构中,我有许多字段需要为 BIGINT。我使用 Symfony 的以下命令

symfony doctrine:build-sql

生成我的数据库。这些字段始终以int 的形式出现。我在架构中尝试了以下类型:

  • int
  • {type: integer, notnull: true}
  • {type: integer(5), notnull: true}
  • {type: bigint, notnull: true}

它们似乎都不起作用(我总是在构建 SQL 之前重新构建模型)。

我应该在schema.yml 中输入什么类型?

【问题讨论】:

    标签: php symfony doctrine-orm doctrine symfony1


    【解决方案1】:

    这取决于你的 RDBMS,但如果你使用 MySQL,你可以阅读 lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/DataDict/Mysql.php

        case 'integer':
        case 'int':
                if ( ! empty($field['length'])) {
                    $length = $field['length'];
                    if ($length <= 1) {
                        return 'TINYINT';
                    } elseif ($length == 2) {
                        return 'SMALLINT';
                    } elseif ($length == 3) {
                        return 'MEDIUMINT';
                    } elseif ($length == 4) {
                        return 'INT';
                    } elseif ($length > 4) {
                        return 'BIGINT';
                    }
                }
                return 'INT';
    

    所以你的第二次尝试应该成功了......还是你使用了另一个 RDBMS?你应该在这行代码设置一个断点,然后逐步调试,这很奇怪。另外,检查你的 Mysql.php 文件的内容,看看你是否和我有相同的东西(我使用 sf 1.4.11 附带的学说)

    【讨论】:

      【解决方案2】:

      是的,integer(5) 应该可以完成这项工作。

      您可以在The symfony and Doctrine book 中查看其他架构数据类型,但请记住,它是 1.2 版,不再维护。

      最好的问候。

      【讨论】:

        【解决方案3】:

        使用 Symfony 2.x(例如 Doctrine 2.4.1)和实体上的 PHP 注释,使用 @ORM\Column(name="id", type="bigint") 会产生 MySQL bigint(20)

        注意:OP 用 symfony1 和教义 1 标记了这个问题,对此解决方案将不起作用

        【讨论】:

        • 问题是关于symfony1,通常使用doctrine1。这不应该被接受(甚至不应该被赞成)。应该是评论
        • @greg0ire - 你是对的 - 应该是评论。在这里搜索 Symfony2 并且我最初并没有注意到 symfony1 标签 - 可能应该编辑 Q 以使其明确,因为大多数流量都与 Symfony2+ 有关
        • 是的,如果问题没有正确标记,不要责怪回答者!
        • @GottliebNotschnabel:symfony2 和教义 2 已由 DavidJ 5 日前添加。我不知道为什么。查看previous revisions,您会发现问题已正确标记。恕我直言,DavidJ 应该回滚他的修改并删除这个答案。
        猜你喜欢
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        相关资源
        最近更新 更多