0

我有一个 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;

但它不起作用。

4

2 回答 2

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中找到更多信息

于 2013-10-21T11:17:13.680 回答
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;
}

它为我工作。

于 2013-10-22T06:15:22.613 回答