Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不创建自动UUID的原则_Php_Sql_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php 不创建自动UUID的原则

Php 不创建自动UUID的原则,php,sql,symfony,doctrine-orm,doctrine,Php,Sql,Symfony,Doctrine Orm,Doctrine,我有麻烦了。在Symfony中执行persist()和flush()时,我得到以下结果: 执行“插入到pedido(EMISAO、, 带参数[“2018-01-10”, “100.00”、“65c4002a-06e2-442b-b1da-61197F73B”]:SQLSTATE[HY000]:一般错误:1364字段“id”没有默认值 我的注释在所有实体中都是相同的,但在此实体中(具体而言),条令无法创建自动id: /** * @var \Ramsey\Uuid\Uuid * * @ORM\

我有麻烦了。在Symfony中执行persist()和flush()时,我得到以下结果:

执行“插入到pedido(EMISAO、, 带参数[“2018-01-10”, “100.00”、“65c4002a-06e2-442b-b1da-61197F73B”]:SQLSTATE[HY000]:一般错误:1364字段“id”没有默认值

我的注释在所有实体中都是相同的,但在此实体中(具体而言),条令无法创建自动id:

/**
 * @var \Ramsey\Uuid\Uuid
 *
 * @ORM\Id
 * @ORM\Column(type="uuid", unique=true)
 * @ORM\GeneratedValue(strategy="CUSTOM")
 * @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
 */
protected $id;
由于字段ID是自动生成的,因此此错误似乎没有意义。我还有其他实体,比如Pessoa,它可以很好地使用相同的注释

如何强制条令“理解”UUID索引?

您需要:

  • 检查表
    pedido
    中的字段
    id
    是否为自动递增主键

  • 值(?,?,?)更改为
    值(?,?)
    ,因为您只插入了3个值


  • 当前原则不支持单个实体中的多个自动生成字段。如果有两个字段,则条令将为最后一个字段生成值,并为左第一个字段生成默认值(
    null
    如果未指定)

    由于Ramsey使用静态方法生成UUID,所以您应该将其生成放在持久性逻辑所在的位置(管理器、处理程序或其他)或实体的构造函数中:

    public function __construct()
    {
        $this->uuid = Uuid::uuid4()->toString();
    }
    
    并删除相应的注释:

    * @ORM\GeneratedValue(strategy="CUSTOM")
    * @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
    
    另一种解决方案

    由于您的第二列使用数据库的自动增量功能(我假设您使用的是MySQL),您可以尝试:

  • 删除此列上的生成器批注
  • 使用
    AUTO_INCREMENT
    选项手动定义列定义(不可移植和不规范的IMHO):

  • 该实体中是否有其他ID生成器属性?是的,有一个“codigo”(代码)。但它是一个自动增量生成器(int),而不是UUID。它是一个UUID生成器,而不是一个自动增量生成器:/第二种解决方案效果更好。我试图创建一个类来生成autoID,但是执行了一些查询来获取最后一个ID,这毫无意义:P谢谢!在构造函数中手动生成uuid是否保存?如果从db加载实体(使用现有uuid),会发生什么情况?那么,我是否需要uuid字段的公共setter方法?如果从db加载实体,则不会调用构造函数。