如何在 Doctrine 中创建关系

Posted

技术标签:

【中文标题】如何在 Doctrine 中创建关系【英文标题】:How to create a relation in Doctrine 【发布时间】:2011-06-12 15:40:56 【问题描述】:

我和 Jobeet 一起学习 Symfony 和 Doctrine。我想在 JobeetJob 中添加关系。 这是原创的: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/03

我喜欢这样:

JobeetCategory:
  actAs:  Timestampable: ~ 
  columns:
    name:  type: string(255), notnull: true, unique: true 

JobeetCategorya:
  actAs:  Timestampable: ~ 
  columns:
    name:  type: string(255), notnull: true, unique: true 

JobeetJob:
  actAs:  Timestampable: ~ 
  columns:
    category_id:   type: integer, notnull: true 
    categorya_id:   type: integer, notnull: true 
    type:          type: string(255) 
    (...)
    expires_at:    type: timestamp, notnull: true 
  relations:
    JobeetCategory:  onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs 
    JobeetCategorya:  onDelete: CASCADE, local: categorya_id, foreign: id, foreignAlias: JobeetJobsa 

当我这样做时:

php symfony 学说:build --all --and-load

我有错误

SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(jobeet.jobeet_job,CONSTRAINT jobeet_job_categorya_id_jobeet_categorya_id FOREIGN KEY(categorya_id)参考jobeet_categorya (id) 删除级联)

为什么?

【问题讨论】:

Patrick,您应该将您的标题表述为一个问题,并且由于 Jobeet 是 symfony/doctrine,所以也将它放在那里。这有助于其他人发现他们可能回答的问题。只是一个建议:How to create a relation in Doctrine? 遇到错误时该怎么办? 我做:php symfony 学说:build --all --and-load 将其添加到您的问题中,例如:当我执行 doctrine:build --all --and-load 时,我会收到此错误:(您的错误消息已经在问题中,因此请将其放在中间) ok :) 可能知道问题的解决方法吗? 【参考方案1】:

我认为问题是由该命令的--and-load 部分引起的。当您以违反其外键关系的顺序(即,将子数据放在父数据之前)将固定装置加载到表中时,经常会出现该错误。

如果这确实是你的问题,你可以在这里找到几个关于如何解决这个问题的线程......基本上,只需先构建 (build --all),然后分批加载固定装置,这样他们就尊重外国关键关系。

【讨论】:

以上是关于如何在 Doctrine 中创建关系的主要内容,如果未能解决你的问题,请参考以下文章

使用 Doctrine/DBAL 迁移数据库时如何修复未知数据库错误?

在 Doctrine ORM 中创建文件上传模板

在奏鸣曲类型集合中创建新行后如何添加 javascript?

如何在 laravel 中创建自定义关系?

如何在另一个 DataMap 中创建与 ObjEntity 的关系?

如何创建如何在 typeorm 中创建多对多关系,[NestJS]