выберите запросы с Zend_DB_Table - PullRequest
2 голосов
/ 05 декабря 2010

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

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. Как мне исправить это?

1 Ответ

3 голосов
/ 05 декабря 2010

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

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

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

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 - это то, что действительно рекомендуется. Посмотрите Quickstart для подробного руководства по упрощенной реализации.

...