我认为可以使用Zend_Db_Select或Zend_Db_Table_Abstract编写选择查询,但我不明白何时使用两者中的哪一个。
是否有一个比其他更优化?与其中一个连接“更容易”吗?
谢谢!
答案 0 :(得分:11)
由于历史原因,在生成查询时有几个不同的选项。
在早期版本的Zend Framework中,Zend_Db_Tables有一个方法fetchAll,其中包含参数where,order,offset和limit,可用于从表中获取行。开发人员很快发现了这种方法的局限性。你会如何添加GROUP BY子句?
Zend_Db_Select是为解决这个问题而发明的,您会注意到,自ZF 1.5起,fetchAll及相关方法接受Zend_Db_Select实例作为第一个参数。现在不推荐使用fetchAll的其他参数,您应该传入SQL字符串或Zend_Db_Select对象。
Zend_Db_Select只是一个用于构建SQL查询的编程接口。它非常适合根据用户输入或不同因素更改SQL的各个部分,因为您可以只更改方法调用和参数,而不是操作字符串。
Zend_Db_Table将返回一个Zend_Db_Table_Select(一个Zend_Db_Select子类)实例,如果你调用它的select方法,它的表名是预定义的 - 这是Zend_Db_Select和Zend_Db_Table_Select之间的唯一区别。
您的考虑真的是使用Zend_Db_Select还是手动编写SQL。 Zend_Db_Select不是无限灵活,但它易于阅读,操作和使用。