2010-03-25 28 views
3

我是软删除对象在MySQL数据库中,并使用波轮ORM。我已经开始软删除工作了,但是代价是失去了我强制执行的父子关系,因为实际的行没有被删除。Propel是否知道对象何时被软删除,以便子实体仍然可以显示其已删除的父对象?

是否有任何方式的Propel知道一个战绩已经软删除的,当你访问它,这样一个空引用异常没有抛出?这样,虽然父母已被删除,但子女仍然可以读取这是关系,但是当更新孩子或创建新孩子时,删除的父母不可访问。

例如,

本书有一个的AuthorID,如果作者属于AUTHORID是软删除,那么:

$book->getAuthor(); 

将返回正确的作者(仅供查看用途)。但是,如果添加了新书,则软删除的作者无法选择。

有谁知道,如果这个功能被内置到行走?

回答

0

我不知道为什么的作者将被允许被删除,但他的作品就不会(或基本上,为什么出现在项目中的场景),但你可以创建自定义标准,并执行它。下面的代码依赖于波轮的版本,您正在使用(但概念仍然是相同的):

$c = new Criteria(); 
$c->getNewCriterion(self::AUTHOR_ID, $parentId); 
return self::doSelect($c, $connection); 
0

过这个问题只是偶然。似乎不会使用软删除来描述您所描述的功能会更有意义。我强烈建议您创建一个标记是否启用作者的字段,即一个名为isEnabled的布尔字段。

然后,您可以使用所产生的过滤方法AuthorQuery类,在这种情况下

AuthorQuery::create->filterByisEnabled() 
        ->find(); 

如果一个对象仍然会在它是不是真的合适删除应用程序中使用。软删除功能仅用于参考或恢复错误。

相关问题