从ZF2中的RowSet中选择一行

时间:2013-10-26 21:24:14

标签: php sql select zend-framework2 rowset

我的表看起来像这样

    id      uniqueId    userId  album
    1       1           1       Example
    2       2           1       Example
    3       1           2       Example
    4       3           1       Example
    5       2           2       Example

我想找到相册标题userId => 1uniqueId => 3(其中id => 4,但我无权访问,只有其他两个)。

为此,我尝试使用用户1的相册返回RowSet对象的getAlbumsByUserId($userId)。然后我试图从返回的行集中获取uniqueId => 3的相册

像下面这样的东西将不起作用 $albumObject = $albumTable->getAlbumsByUserId(1);
$row = $albumObject->select(array('uniqueAlbumID' => 3))->current();

这是将UserId作为RowSet获取专辑的功能

public function getAlbumsByUserId($userId)
    {
        $userId     = (int) $userId;
        $rowset = $this->tableGateway->select(array('user_id' => $userId));

        return $rowset;
    }

我可以对RowSet对象做一个foreach,用if语句找到uniqueId,但我不得不认为有更好的方法。

编辑: 我还没有找到一种方法从resultSet中做一个select,但是你可以在select数组中的2个条件下做。

2 个答案:

答案 0 :(得分:2)

也许我不明白你想要什么,但是如何使用join来创建你的查询语句,你可以在Zend中完成这些功能。

在你的AlbumTable.php中:

public function getAlbum($userId, $uniqueAlbumId){
    $resultSet = $this->tableGateway->select()->where(array('userId = 1', 'uniqueId = 3'));
    $row = $resultSet->current();
    if(!$row){
         throw new Exception('No row found');
   }
    return $row;
}

答案 1 :(得分:0)

首先,我相信返回的rowset是一个迭代器,你可以使用foreach并遍历每一行。但是,如果要返回某个ID值的相册,则需要添加如下函数:

public function getAlbumById($id)
{
  $rowset = $this->tableGateway->select(array('id' => $id));
  $row = $rowset->current();
  return $row;
}

您可以在此处查看ZF关于tablegateway的网站:http://framework.zend.com/manual/2.0/en/modules/zend.db.table-gateway.html

有关RowSet的信息在这里:http://framework.zend.com/manual/1.12/en/zend.db.table.rowset.html