Zend DB:表类和行类之间的代理


Zend DB: Proxying between Table and Row classes?

Zend DB表和Zend DB行之间是否存在代理?例如,如果我重写DB_Tabledelete()方法以仅标记已删除的记录,我是否需要在DB_Table_Row中做同样的事情?还是行代理到表?

如果代理已经到位,它会朝哪个方向发生?(表的行代理?)哪些方法?(行delete()和save()-到表delete()、update()和insert()?)

我意识到我可以自己测试,但很可能你会更快(如果你还不知道答案…)

谢谢!

编辑

这个问题的原因是我正在开发一些模型,其中将包括ACL。由于我在控制器中也有ACL,所以我计划只覆盖DB类中选定的方法。例如,我想确保一个成员只能删除自己的记录。(我认为我需要使用ACL断言来完成此操作)。

所以我问了上面的问题,以确定我是否必须重写成对的方法(即Table类中的一个,Row类中的另一个),或者我是否可以只重写一个。然而,从这些回答来看,我现在想知道我是否问错了问题。

有经验的开发人员如何应对这种情况?也许您选择只使用一个删除方法(例如,从Row类)。(更新方法也是如此)。如果是,是否覆盖表类删除以防止意外使用?

我很好奇。。。谢谢

据我所知,Zend_DB_Row中的delete方法采用了Zend_DB_Table中的delete方式。因此,如果覆盖Zend_DB_Table中的delete,则应该通过Zend_DB_Row中的delete来查看它。

希望这能有所帮助。不管怎样,如果不是这样的话,请告诉我。

Zend_Db_Table_Row_Abstract 的第627行
    /**
     * Execute the DELETE (this may throw an exception)
     */
    $result = $this->_getTable()->delete($where);

获取表并执行delete方法。

Zend_Db_Table_Abstract 第1182行

    return $this->_db->delete($tableSpec, $where);

这将调用Zend_Db_Adapter_Abstract::delete()。

IMO,最好在适配器类中重写delete方法。这将确保无论删除请求来自哪里,都将执行您的自定义删除逻辑。