Выберите строку из набора строк в ZF2

Мой стол выглядит примерно так

    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 => 1 а также uniqueId => 3 (Где id => 4, но у меня не будет доступа к нему, только два других).

Для этого я пытаюсь getAlbumsByUserId($userId) который вернет объект RowSet с альбомами пользователя 1. Затем я пытаюсь получить альбом из возвращенного набора строк с 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;
    }

Я мог бы сделать foreach для объекта RowSet, чтобы найти uniqueId с оператором if, но я должен думать, что есть лучший способ.

Редактировать:
Я до сих пор не нашел способ сделать выбор из resultSet, но вы можете сделать 2, где условия в массиве выбора.

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;
}

Во-первых, я считаю, что возвращенный набор строк является итератором, для которого вы можете использовать foreach и перебирать каждую из строк. Однако, если вы хотите вернуть альбом с определенным значением идентификатора, вам необходимо добавить функцию, например:

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

Другие вопросы по тегам