Выберите строку из набора строк в 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