静态方法,Zend_View错误

时间:2010-09-09 20:51:06

标签: php zend-framework

我在模型上有一个静态方法'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

1 个答案:

答案 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

当你真的想要相反时。