18

doctrine DBAL2 で、次のようなクエリを実行すると:

<?php
$connection = $this->getDatabaseConnection();

$sql =  "SELECT page_url
           FROM cms_user_page
          WHERE site_id = :siteid
            AND active = '1'
    ";

$stmt = $connection->prepare($sql);
$stmt->bindValue("siteid", $id);
$stmt->execute(); 

return $stmt->fetchAll();
?>

次のような結果が得られます。

Array
(
    [0] => Array
        (
            [page_url] => index.php?action=login
        )

    [1] => Array
        (
            [page_url] => index.php?action=shoppingcart
        )

    [2] => Array
        (
            [page_url] => index.php?action=products
        )
)

私の質問は、次のような結果を生成するフェッチ モードがあるかどうかです。

Array
(
    [0] => index.php?action=login

    [1] => index.php?action=shoppingcart

    [2] => index.php?action=products
)

ドキュメントでフェッチモードに関する情報を見つけることができませんでした。そして、配列マップを実行できました。しかし、それは私の意見ではオーバーヘッドです..

4

6 に答える 6

32

フェッチ モードパラメータを に渡すことができますfetchAll()

$stmt->fetchAll(\PDO::FETCH_COLUMN)
于 2015-04-16T12:33:39.830 に答える
9

この回答は正しいため、この回答は編集されました。

FETCH_COLUMNfetchAll() でフェッチ モードを使用できます。

$stmt->fetchAll(\PDO::FETCH_COLUMN)

別のユーザーがコメントで指摘しているように、fetchAll() は多数の興味深い形式でフォーマットされたデータを返すことができます。

または、fetchColumn() で繰り返すことができます。

while($page_url = $stmt->fetchColumn()) { 
    echo $page_url . PHP_EOL;
}
于 2012-12-13T22:34:03.090 に答える
2

その形式の結果が必要な場合が複数ある場合は、その意味もよくわかりませんが、AbstractHydrator インターフェイスを実装して、必要に応じて構造を返す独自の ArrayHydrator を作成できます。

ハイドレーション クラスは NS にあります。

Doctrine\ORM\Internal\Hydration
于 2012-09-20T09:58:45.740 に答える
0

データベースで複数の行を要求するとすぐに、意味がありません

RDBMS は行と列を格納するため、結果は驚きの行と列として表されます。

プログラミングの世界では行列と呼ばれ、PHP の世界ではarray

 ________________
| id   |   name  |
|______|_________|
| 1    |   foo   |
|______|_________|
| 2    |   bar   |
|______|_________|

結果は

array(
  0 => array(
     'id'   => 1,
     'name' => 'foo',
  ),
  1 => array(
     'id'   => 2,
     'name' => 'foo',
  )
);

いいえ、それはできません。必要に応じて結果を処理する必要があります。

于 2012-09-20T09:46:35.913 に答える