2013-04-04 61 views
1

我是Zend框架中的新成员。在Zend框架中选择命令

我有这种结构的代码。

DBTABLE

class Application_Model_DbTable_Employee extends Zend_Db_Table_Abstract 
{ 

protected $_name = 'tab_employee'; 
} 

型号

public function selectAllEmployees(){ 
    $tblEmployee = new Application_Model_DbTable_Employee(); 
    $tblEmployee->select('*'); 
} 

但我能不能让所有的员工的所有数据。

+0

任何人都可以帮我找到解决方案吗? – student 2013-04-04 05:22:18

回答

2
public function selectAllEmployees(){ 
    $tblEmployee = new Application_Model_DbTable_Employee(); 
    return $tblEmployee->fetchAll($tblEmployee->select()); 
} 
0

模型函数

public function selectAllEmployees() 
    { 
     $selectSql = $this->select(); 
     $selectSql->from($this->_name, array('*')) 
        ->order(id DESC');  

     return $this->fetchAll($selectSql); 
    } 

$employeeModel = new Application_Model_Employee(); 
$employees = $employeeModel->selectAllEmployees(); 
+0

这是不完整的,你忘记访问'dbTable'作为网关。这段代码可以在dbTable本身中工作 – RockyFord 2013-04-04 09:35:52

0

Maks3w是正确的,以及简洁。

这里有一些更详细的信息。

有很多方法可以使用您的Application_Model_DbTable_Employee来访问和查询您的数据库的tab_employee表。

最简单的方法是直接从dbTable模型本身来查询:

class Application_Model_DbTable_Employee extends Zend_Db_Table_Abstract 
{ 

    protected $_name = 'tab_employee'; 

    public function selectAllEmployees() 
    { 
     //$this refers to the current dbTable object 
     $select = $this->select(); 
     //when querying from the dbTable the from() parameter is assumed to be $this->_name, array('*') 
     //there several other sql commands available to the select(), where(), orWhere(), join() 
     $select->order('id DESC'); 

     $result = $this->fetchAll($select); 

     return $result; 
    } 
} 

控制器代码:

public function indexAction(){ 
     model = new Application_Model_DbTable_Employee(); 
     $employees = $model->selectAllEmployees(); 
     $this->view->employees = $employees 
    } 

通常映射器模型被用于访问数据库和将数据提供给一个实体模型。这也很常见,相对来说很简单。要记住的关键项目时设计的映射是包括代码来访问DBTABLE模型数据库适配器,通常被称为gateway,这里是一些示例代码:

<?php 
//This is one way to build a mapper 
abstract class My_Model_Mapper_Abstract 
{ 
    /** 
    * Instance of Zend_Db_Table_Abstract 
    */ 
    protected $tableGateway = null; 

    /** 
    * Will accept a DbTable model passed or will instantiate 
    * a Zend_Db_Table_Abstract object from table name. 
    */ 
    public function __construct(Zend_Db_Table_Abstract $tableGateway = null) 
    { 
     if (is_null($tableGateway)) { 
      $this->tableGateway = new Zend_Db_Table($this->_tableName); 
     } else { 
      $this->tableGateway = $tableGateway; 
     } 
    } 

    /** 
    * Get default database table adapter 
    */ 
    protected function getGateway() 
    { 
     return $this->tableGateway; 
    } 

    /** 
    * findAll() is a proxy for the fetchAll() method and returns 
    * an array of entity objects. 
    * 
    * @param $where, primary key id 
    * @param string $order in the format of 'column ASC' 
    * @return array of entity objects 
    */ 
    public function findAll($where = null, $order = null) 
    { 
     $select = $this->getGateway()->select(); 

     if (!is_null($where)) { 
      $select->where('id = ?', $where); 
     } 
     if (!is_null($order)) { 
      $select->order($order); 
     } 
     $rowset = $this->getGateway()->fetchAll($select); 

     $entities = array(); 
     foreach ($rowset as $row) { 
      $entity = $this->createEntity($row); 
      $this->setMap($row->id, $entity); 
      $entities[] = $entity; 
     } 

     return $entities; 
    } 

    /** 
    * Abstract method to be implemented by concrete mappers. 
    */ 
    abstract protected function createEntity($row); 
} 

具体模式可能类似于:

直接

public function indexAction(){ 
    model = new Application_Model_Mapper_Employee(); 
    $employees = $model->findAll(); 
} 

和最直接的方式来查询你的数据库是最推荐的方式,:

<?php 

class Application_Model_Mapper_Employee extends My_Model_Mapper_Abstract 
{ 
    protected $tableName = 'tab_employee'; 
    //I hard code the $tableGateway though this is probably not the best way. 
    //$tableGateway should probably be injected, but I'm lazy. 
    public function __construct(Zend_Db_Table_Abstract $tableGateway = null) 
    { 
     if (is_null($tableGateway)) { 
      $tableGateway = new Application_Model_DbTable_User(); 
     } else { 
      $tableGateway = $tableGateway; 
     } 
     parent::__construct($tableGateway); 
    } 
    //create the Entity model 
    protected function createEntity($row) 
    { 
     $data = array(
      'id'  => $row->id, 
      'name'  => $row->name, 
      'password' => $row->password, 
     ); 
     $employee = new Application_Model_Employee($data); 

     return $employee; 
    } 
} 

使用该控制器中的可能看起来像从控制器:

public function indexAction(){ 
    model = new Application_Model_DbTable_Employee(); 
    $employees = $model->fetchAll(); 
    $this->view->employees = $employees 
} 

我希望这为您提供一些帮助,而不是许多混乱。