>我正在使用学说的软删除,删除后我想删除相关记录。
这是我正在使用的架构文件。
detect_relations: true
User:
actAs:
Timestampable:
SoftDelete:
Sluggable:
unique: true
fields: [name]
canUpdate: true
tableName: user
columns:
name:
type: string(50)
notnull: true
email:
type: string(50)
notnull: true
unique: true
password:
type: string(50)
notnull: true
business_id: integer
relations:
Business:
cascade: [delete]
Business:
actAs:
Timestampable:
SoftDelete:
Sluggable:
unique: true
fields: [name]
canUpdate: true
tableName: business
columns:
name:
type: string(50)
notnull: true
website: string(100)
address: string(100)
当我尝试软删除用户时,它不会从业务表中删除相关记录(即它不会更新业务表中的deleted_at
标志)。 仅更新用户表中的deleted_at
标志。
我正在使用的 DQL 是。
$q = Doctrine_Query::create()
->delete('Model_User u')
->where('u.id = ?', $id);
$q ->execute();
我哪里出错了?
四处寻找一段时间后,我终于自己找到了解决方案。 希望这可以帮助与我有相同问题的人。
下面是应用程序级别删除级联工作的一些条件。
- 与 save() 操作不同,需要显式打开 delete() 级联
除了在架构中定义cascade: [delete]
之外,重要的是要注意,您还需要显式定义关系。
如果您依赖于detect_relations: true
来生成所有关系,则不适用于应用程序级别删除级联。(至少在手动定义关系后,它对我不起作用)。
- 应用程序级级联 save() 和 delete() 在执行 DQL 更新和删除语句时不适用,仅在调用 save() 和删除() 在你的对象上。
教义文件对此并不清楚。 我不得不参考Symfony文档才能理解。 教义文件只说。
删除记录时的通用过程如下 通过 $record->delete():
对我来说,理解这是相当令人困惑的。 但是在浏览了Symfony的教义文档之后,我很清楚该怎么做。 所以而不是通过 DQL 删除。 我不得不使用它。
$user = Doctrine_Core::getTable('User')->find(1)
$user->delete();
和嘘,它有效。 :)
PS:这是symfony文档的链接,以防有人想参考。
http://www.symfony-project.org/doctrine/1_2/en/04-Schema-Files#chapter_04_sub_application_level
这是一篇帖子的链接,它澄清了我的疑问,尽管没有任何用处:)
https://groups.google.com/forum/?fromgroups#!topic/doctrine-user/POq6ybO01lg%5B1-25%5D