为什么CakePHP将数据库结果包含在如此多的子数组中?

时间:2011-07-25 01:00:50

标签: cakephp

从数据库中提取数据时,CakePHP有一个很烦人的习惯,就是拥有非常深的多维数组。

例如,我只想使用SQL_CALC_FOUND_ROWS和“SELECT FOUND_ROWS()作为row_count”获取上一个查询返回的行数。结果是深度为三个数组:$ result [0] [0] ['row_count']。

3 个答案:

答案 0 :(得分:5)

你可以使用 $this->Model->find('count'); http://book.cakephp.org/view/1020/find-count? 或重写查询为 "select FOUND_ROWS() as TableName.row_count from tablename TableName"

答案 1 :(得分:2)

这是一个非常好的问题!我不确定为什么CakePHP这样做并且自己也想知道同样的事情。我只是半开玩具“内部”并没有进入框架的这个方面。

如果我冒险猜测......

这是Cake的ORM的副作用。 Cake附带的ORM,至少在我看来是 ,非常好,允许你用几乎没有或没有原始SQL做一些高度复杂的查询。我确信这是Cake受欢迎的部分原因。它将复杂的SQL语句转换为相对简单的多维数组结构,包括创建查询和返回的数据。

可能影响这一点的Cake的另一个方面是他们的“约定优于配置”理念。我确信在开发方面返回相同的通用数组结构而不是尝试优化原始SQL更简单。我敢说,大多数Cake查询是通过ORM生成的,而不是由开发人员编写的原始查询。从发展的角度来看,优化它们可能没有意义。

同样,这只是我受过教育的猜测

答案 2 :(得分:2)

好吧,首先,您正在使用自定义查询,而Cake必须处理返回数据的所有可能情况(它不知道返回数据将是1值)。例如,$ result数组,我猜最外面的数组用于返回的数据是多个记录。

所以是的,就像那样,因为它遵循从DB结果转换为PHP变量的某些步骤。而且整个框架的一致性更好。在像你这样的情况下它肯定很烦人,但你总是可以在app_model中定义一个自定义查询()函数,以便在有一个返回值的情况下智能地删除数组。