如何在 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
,CONSTRAINTjobeet_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 迁移数据库时如何修复未知数据库错误?
在奏鸣曲类型集合中创建新行后如何添加 javascript?