我有一个类似以下的代码
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 对象。我该如何纠正这个问题?
您的模型类不应扩展表类。表类是单独的。如果从 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
}
然而,实际上建议使用数据映射器模式的某种实现。查看快速开始 http://framework.zend.com/manual/en/learning.quickstart.create-model.html有关简化实现的完整教程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)