【问题标题】:Select a Row from a RowSet in ZF2从 ZF2 中的 RowSet 中选择一行
【发布时间】:2013-11-05 21:11:03
【问题描述】:

我的桌子看起来像这样

    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,但我无法访问,只有另外两个)。

为此,我尝试getAlbumsByUserId($userId),它将返回一个带有用户 1 相册的 RowSet 对象。然后我尝试使用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,但我必须认为有更好的方法。

编辑:
我还没有找到从结果集中进行选择的方法,但是您可以在选择数组中执行 2 where 条件。

【问题讨论】:

    标签: php sql select zend-framework2 rowset


    【解决方案1】:

    也许我不明白你到底想要什么,但是如何使用 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;
    }
    

    【讨论】:

    • 看起来这可能是我正在寻找的;加入内。我会试一试。谢谢:)
    • 在查看 join 之后,似乎我只能使用 join 来连接两个表,而不是两个行集,我已经用我的表格式和我正在尝试做的事情更新了问题。
    • 如果你有两个数字,也许可以尝试使用 Where 和 And。从 youtable WHERE userId = '1' AND uniqueId = '3' 中选择专辑。
    • 我尝试过这样的事情,但它不起作用:(。$rowset = $this->tableGateway->select(array('userId' => $userId, 'uniqueId' => $uniqueId));其中数组是 where 语句
    • 尝试使用两种方法 tableGateway->select()->where() 就像我在上面的答案中写的那样。它适用于我的项目。
    【解决方案2】:

    首先,我相信返回的行集是一个迭代器,您可以在其上使用 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

    【讨论】:

    • 问题是我无法通过uniqueId 搜索,因为它对用户来说是唯一的。所以,我需要先通过userId 为用户获取专辑,然后我需要通过uniqueId 从中select()
    猜你喜欢
    • 2011-09-29
    • 2023-03-18
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2012-05-05
    • 2010-11-26
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多