我的表看起来像这样
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,但我无权访问,只有其他两个)。
为此,我尝试使用用户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个条件下做。
答案 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