我在模型上有一个静态方法'findAll',它基本上可以获得具有特定条件的所有行。这种方法工作正常,我可以使用:
来调用它$m::findAll();
其中$ m是模型名称作为变量。我可以输出这个并返回正确的结果。但是,将此值分配给Zend_View对象中的变量时,如:
$this->view->viewvariable = $m::findAll();
我收到错误:
Zend_Db_Table_Exception:太多了 主键的列
任何想法为什么?
查找所有功能:
final public static function findAll($where = false, array $options = array()) {
$object = new static();
if (!empty($options)) $options = array_merge($object->options, $options);
else $options = $object->options;
$run = $object->buildDefaultSelect($where, $options);
$rows = $run->fetchAll();
if ($options['asObject'] == true) {
$result = array();
foreach ($rows as $r) {
$class = new static();
$class->setInfo($r);
$result[] = $class;
}
return $result;
} else {
if (count($rows) > 0) return $rows;
else return array();
}
}
注意: 除了分配视图变量之外,此函数在任何地方都可以正常工作。如果我运行以下(不将其分配给视图变量),它将显示正确的数组数据。
var_dump($m::findAll($module['where'], $module['options']));
exit;
在我看来(为了这篇文章,我已经用viewvariable替换了实际名称):
<?php foreach($this->viewvariable as $item) { ?>
//Do some echoing of data in $item
//Close foreach
答案 0 :(得分:1)
我怀疑问题出在Zend_View
。在没有看到您的代码的情况下很难说清楚,但我的猜测是findAll()
错误地使用了Zend_Table_Db
find()
函数。
据我所知,唯一引发异常的地方是find()
上的Zend_Db_Table_Abstract
函数。
也许,在findAll()
函数内(或在它调用的函数中)你正在做其中一个:
$zendDbTable->find(1,2) //is looking for a compound key
$zendDbTable->find(array(1,2)) //is looking for two rows
当你真的想要相反时。