2010-12-05 57 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

Your 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 
} 

然而,在使用某种实现数据映射模式是什么实际建议。请查阅Quickstart以获取有关简化实施的详细教程。

相关问题