我正在使用doctrine的SoftDelete,删除后我想SofDelete相关记录。
这是我正在使用的Schema文件。
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)
当我尝试SoftDelete用户时,它不会从业务表中删除相关记录(即它不会更新业务表中的deleted_at
标志)。只更新用户表中的deleted_at
标志。
我正在使用的DQL是。
$q = Doctrine_Query::create()
->delete('Model_User u')
->where('u.id = ?', $id);
$q ->execute();
我哪里错了?
答案 0 :(得分:4)
经过一段时间的搜索,我终于找到了解决方案。希望这可以帮助遇到与我相同问题的人。
这里有一些应用程序级别删除级联工作的条件。
除了在Schema中定义cascade: [delete]
之外,重要的是要注意您还需要明确定义关系。
如果您依赖于detect_relations: true
来生成所有关系,则这对于应用程序级删除级联不起作用。 (至少它在我手动定义它工作的关系之后对我不起作用)。
学说文档对此并不清楚。为了理解,我不得不参考symfony文档。学说文档只说。
以下介绍删除记录时的一般过程 通过 $ record-> delete():
让我明白这很令人困惑。但经过symfony的学说文档后,我明白了如何去做。所以不要通过DQL删除。我不得不使用它。
$user = Doctrine_Core::getTable('User')->find(1)
$user->delete();
和Booom,它有效。 :)
P.S:这是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