Статический метод, ошибка Zend_View - PullRequest
2 голосов
/ 10 сентября 2010

У меня есть статический метод '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 Ответ

1 голос
/ 10 сентября 2010

Я сомневаюсь, что проблема с 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

Когда ты действительно хочешь обратного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...