2010-12-05 21 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以獲取有關簡化實施的詳細教程。