выбирать запросы с помощью Zend_DB_Table

У меня есть код, похожий на следующий

class Application_Model_Company  extends Zend_Db_Table_Abstract {
 protected $_name = 'companies';
 private $id;
 private $name;
 private $shortName;
 private $description;

 public static function getAllCompanies() {
 $companyObj = new self();
 $select  = $companyObj->select()->order(array('name'));
 $rows = $companyObj->fetchAll($select);
 if($rows) {
  $companies = array();
   foreach($rows as $row) {
    $company = new self();
    $company->id = $row->id;
    $company->name = $row->name;
    $company->shortName = $row->short_name;
    $company->description = $row->description;
    $companies[] = $comapny;
  }
    // return Company Objects
    return $companies;
  }else
   throw new Exception('Oops..');
 }
}

Мне нужно вернуть объекты компании из функции getAllCompanies(), но она возвращает объект Zend_Db_Table_Row. Как это исправить?


person codezgeek    schedule 05.12.2010    source источник


Ответы (1)


Ваш класс модели не должен расширять класс таблицы. Класс таблицы является отдельным. Ваша Модель должна расширять класс строк, если вообще что-либо расширяет из Zend_Db. Также вы не должны напрямую помещать методы поиска в свои классы моделей, они будут идти в классы таблиц.

Это связано с тем, что в парадигме, которую вы пытаетесь здесь использовать, модель представляет собой одну строку данных, класс таблицы представляет таблицу как хранилище данных, а класс набора строк представляет набор строк (или моделей).

Чтобы правильно реализовать то, что вы описываете в своем вопросе, вы должны сделать что-то вроде следующего:

class Application_Model_DbTable_Company extends Zend_Db_Table_Abstract
{
   // table name
   protected $_name = 'company';

   protected _$rowClass = 'Application_Model_Company';

   // your custom retrieval methods
}

class Application_Model_Company extends Zend_Db_Table_Row
{
  protected $_tableClass = 'Application_Model_DbTable_Company';
  // custom accessors and mutators
}

Однако на самом деле рекомендуется использовать какую-либо реализацию шаблона Data Mapper. Ознакомьтесь с подробным руководством по упрощенному выполнение.

person prodigitalson    schedule 05.12.2010