35408
Zend Framework 2.5でSELECT処理について、以下の違いを知りたいです。

【Modelでのソース】

1.TableGatewayのセレクト機能

```

    $resultSet = $this->tableGateway->select();
    return $resultSet;
    
```

2.$statement->execute();

```

    $sql = new Sql( $this->tableGateway->adapter );
    $select = $sql->select();
    $select->from('hogehoge');
    // 作成したクエリを使用してステートメントを作成する
    $statement = $sql->prepareStatementForSqlObject($select);
    $resultSet = $statement->execute();
    return $resultSet;
    
```

上記1では、取得したデータを複数回foreachで使用するため、bufferに入れています。

```

    $resultSet->buffer();
    
```

上記2では、同様の処理をしても、bufferの機能が利用できず、foreachが複数回実行できません。  
以下のエラーが発生します。

```

    This result is a forward only result set, calling rewind() after moving forward is not supported
    
```

お手数をおかけしますが、対応方法をご教授いただけますでしょうか？  
以上です、よろしくお願いいたします。
CC BY-SA 3.0
2017-06-08T10:13:07.337
35399
2017-06-08T14:22:50.067
2017-06-08T10:46:35.163
76
23649
question
php zend-framework
$this->tableGateway->adapter->select();の結果を、bufferに入れる方法
2.$statement->execute();

```

    $result = $statement->execute();
    
```

executeメソッドの返り値はResultSetオブジェクトではなく、Zend\Db\Adapter\Driver\Pdo\Resultオブジェクトです。

一般的には、このResultオブジェクトをResultSetオブジェクトに整形（初期化）しなければなりません。

```

    $sql = new Sql( $this->tableGateway->adapter );
    $select = $sql->select();
    $select->from('hogehoge');
    // 作成したクエリを使用してステートメントを作成する
    $statement = $sql->prepareStatementForSqlObject($select);
    $result = $statement->execute();
    
    // 取得したResultオブジェクトを任意の形式に整形
    $resultSet = new ResultSet();
    $resultSet->initialize($result);
    
    return $resultSet;
    
    //この時点で$resultSet->buffer();するとTableGatewayと同様の挙動になる。
    
```
CC BY-SA 3.0
2017-06-08T14:22:50.067
35408
2017-06-08T14:22:50.067
13097
35399
answer