我的代码类似于
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()函数返回Company对象,但它返回Zend_Db_Table_Row对象。我该如何纠正?
答案 0 :(得分:3)
您的Model类不应扩展表类。表类是分开的。如果从Zend_Db扩展任何东西,你的模型应该扩展行类。你也不应该直接在你的Model类上放置检索方法,它们会继续使用表类。
这是因为在您尝试使用的范例中,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以获得有关简化实施的详尽教程。