2010-12-05 1 views
2

У меня есть код что-то вроде следующихвыберите запросы с 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 объект. Как это исправить?

ответ

3

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

Это связано с тем, что в парадигме, которую вы пытаетесь использовать здесь, модель представляет собой единую строку данных, класс 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 
} 

Однако, используя какой-то реализации шаблона Mapper Данные, Что на самом деле рекомендуется. Просмотрите Quickstart для подробного руководства по упрощенной реализации.