首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不创建自动UUID的原则

不创建自动UUID的原则
EN

Stack Overflow用户
提问于 2018-01-10 15:06:47
回答 2查看 8K关注 0票数 5

我有麻烦了。当我在Symfony中执行持久化()和刷新()时,我得到了以下内容:

在执行“INSERT INSERT INSERT (emissao,total,cliente_id)值(?,?)”时发生异常。对于"2018-01-10“、"100.00”、“65c4002a-06e2-442 b-b1da-61197 f73ba3b”:SQLSTATEHY000:一般错误: 1364字段'id‘没有默认值。

我的注释在所有实体中都是相同的,但是在这个实体中,Doctrine不能创建自动id:

代码语言:javascript
复制
/**
 * @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索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-10 17:28:40

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

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

代码语言:javascript
复制
public function __construct()
{
    $this->uuid = Uuid::uuid4()->toString();
}

并删除相应的注释:

代码语言:javascript
复制
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")

另一个解决方案

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

  1. 删除列上的生成器注释
  2. 使用AUTO_INCREMENT选项手动定义列定义(非便携和hacky IMHO):
    1. http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#column
    2. https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

票数 15
EN

Stack Overflow用户

发布于 2018-01-10 15:30:34

你需要:

  1. 请检查,表id中的字段pedido是自动递增的主键。
  2. VALUES (?, ?, ?, ?)更改为VALUES (?, ?, ?),因为您只插入3个值
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48190332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档