Zend2 TableGateway:如何检索一组数据

时间:2013-10-21 10:37:19

标签: zend-framework zend-framework2 zend-db zend-db-table

我有一个ContactsTable.php模块和一个这样的函数:

public function getContactsByLastName($last_name){
    $rowset = $this->tableGateway->select(array('last_name' => $last_name));
    $row = $rowset->current();
    if (!$row) {
        throw new \Exception("Could not find row record");
    }
    return $row;
}

这没关系,但它只返回一行。 问题是在我的数据库中我有多个具有相同姓氏的记录,所以我的问题是: 如何返回一组数据?

我试过了:

$where = new Where();  
$where->like('last_name', $last_name);
$resultSet = $this->tableGateway->select($where);
return $resultSet;

但它不起作用。

2 个答案:

答案 0 :(得分:3)

您的第一个功能应该按预期工作,只需删除行

$row = $rowset->current();

因此,完整的功能应如下所示:

public function getContactsByLastName($last_name){
        $rowset = $this->tableGateway->select(array('last_name' => $last_name));

        foreach ($rowset as $row) {
            echo $row['id'] . PHP_EOL;
        }
}

您可以在文档http://framework.zend.com/manual/2.2/en/modules/zend.db.table-gateway.html

中找到更多信息

答案 1 :(得分:0)

您可以使用结果集获取行数:

public function getContactsByLastName($last_name) {
        $select = new Select();
        $select->from(array('u' => 'tbl_users'))
               ->where(array('u.last_name' => $last_name));

        $statement = $this->adapter->createStatement();
        $select->prepareStatement($this->adapter, $statement);
        $result = $statement->execute();

        $rows = array();
        if ($result->count()) {
            $rows = new ResultSet();
            return $rows->initialize($result)->toArray();
        }

        return $rows;
}

它为我工作。