<commit_before><!-- EN-Revision: 8179 -->
<sect1 id="zend.db.table.rowset">

    <title>Zend_Db_Table_Rowset</title>

    <sect2 id="zend.db.table.rowset.introduction">

        <title>導入</title>

        <para>
            テーブルクラスに対して <code>find()</code>
            あるいは <code>fetchAll()</code> メソッドでクエリを実行すると、
            返される結果は <code>Zend_Db_Table_Rowset_Abstract</code> 型のオブジェクトとなります。
            行セットには、<code>Zend_Db_Table_Row_Abstract</code> を継承したオブジェクトが含まれます。
            行セットを使用して各行オブジェクトに対して順にアクセスし、
            行のデータを読み込んだり変更したりすることができます。
        </para>

    </sect2>

    <sect2 id="zend.db.table.rowset.fetch">

        <title>行セットの取得</title>

        <para>
            <code>Zend_Db_Table_Abstract</code> には <code>find()</code> と
            <code>fetchAll()</code> というメソッドがあります。
            これらはどちらも <code>Zend_Db_Table_Rowset_Abstract</code> 型のオブジェクトを返します。
        </para>

        <example id="zend.db.table.rowset.fetch.example">

            <title>行セットの取得の例</title>

            <programlisting role="php"><![CDATA[<?php

$bugs   = new Bugs();
$rowset = $bugs->fetchAll("bug_status = 'NEW'");]]></programlisting>

        </example>

    </sect2>

    <sect2 id="zend.db.table.rowset.rows">

        <title>行セットからの行の取得</title>

        <para>
            通常は、行セットそのものよりもその中に含まれる行のほうが重要になります。
            この節では、行セットを構成する行の情報を取得する方法について説明します。
        </para>

        <para>
            正しい形式のクエリであっても、結果がゼロ行となることがありえます。
            たとえば、抽出条件に一致する行がデータベース内に存在しない場合などです。
            したがって、行セットオブジェクトの中身の行オブジェクトの個数がゼロになることもあります。
            <code>Zend_Db_Table_Rowset_Abstract</code> は
            <code>Countable</code> インターフェイスを実装しているので、
            <code>count()</code> を使用すると行セット内の行の数を調べられます。
        </para>

        <example id="zend.db.table.rowset.rows.counting.example">

            <title>行セット内の行の数を数える</title>

            <programlisting role="php"><![CDATA[<?php

$rowset   = $bugs->fetchAll("bug_status = 'FIXED'");

$rowCount = count($rowset);

if ($rowCount > 0) {
    echo "見つかった行数は $rowCount です";
} else {
    echo 'クエリにマッチする行がありません';
}]]></programlisting>

        </example>

        <example id="zend.db.table.rowset.rows.current.example">

            <title>行セットからの単一の行の読み込み</title>

            <para>
                行セットから行にアクセスするための一番簡単な方法は
                <code>current()</code> メソッドを使用することです。
                これは、行セットに含まれる行数がひとつである場合に最適です。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs   = new Bugs();
$rowset = $bugs->fetchAll("bug_id = 1");
$row    = $rowset->current();]]></programlisting>

        </example>

        <para>
            行セットに含まれる行数がゼロの場合、<code>current()</code>
            が返す値は PHP の <code>null</code> 値となります。
        </para>

        <example id="zend.db.table.rowset.rows.iterate.example">

            <title>行セットの順次処理</title>

            <para>
                <code>Zend_Db_Table_Rowset_Abstract</code> を継承したオブジェクトは
                <code>SeekableIterator</code> インターフェイスを実装しています。つまり、
                <code>foreach</code> ループを使用できるということです。
                これを使用して取得した個々の値は <code>Zend_Db_Table_Row_Abstract</code>
                オブジェクトとなり、これがテーブルの各行に対応します。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs = new Bugs();

// テーブルのすべてのレコードを取得します
$rowset = $bugs->fetchAll();

foreach ($rowset as $row) {

    // 出力は 'Zend_Db_Table_Row' あるいはそれに似たものとなります
    echo get_class($row) . "\n";

    // 行のカラムを読み込みます
    $status = $row->bug_status;

    // 現在の行のカラムの値を変更します
    $row->assigned_to = 'mmouse';

    // 変更をデータベースに書き出します
    $row->save();
}]]></programlisting>

        </example>

         <example id="zend.db.table.rowset.rows.seek.example">

            <title>行セット内の既知の位置への移動</title>

            <para>
                <code>SeekableIterator</code> は、
                イテレータ内の特定の位置に移動することができます。
                そのために使用するのが <code>seek()</code> メソッドです。
                行番号を渡すと、行セット内のその次の位置に移動することができます。
                行番号は 0 から始まることに注意しましょう。
                インデックスが間違っている場合、あるいは存在しない場合は例外がスローされます。
                <code>count()</code> を使って結果の行数を確認してから移動するようにしましょう。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs = new Bugs();

// テーブルのすべてのレコードを取得します
$rowset = $bugs->fetchAll();

// イテレータを 9 番目の要素に移動します (最初の要素がゼロです)
$rowset->seek(8);

// それを取得します
$row9 = $rowset->current();

// そして使用します
$row9->assigned_to = 'mmouse';
$row9->save();
}]]></programlisting>

        </example>

            <para>
                <code>getRow()</code> は、位置がわかっている場合に
                行セット内の特定の行を取得するためのメソッドです。
                しかし、この位置はゼロから数え始めることを忘れないようにしましょう。
                <code>getRow()</code> の最初のパラメータは、位置を表す整数値です。
                2 番目のパラメータはオプションで、boolean 値を指定します。
                これは、Rowset イテレータも同時にその場所に移動させるのかどうかを表します
                (デフォルトは false です)。このメソッドはデフォルトでは
                Zend_Db_Table_Row オブジェクトを返します。
                指定した位置が存在しない場合は例外をスローします。
                例を示します。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs = new Bugs();

// テーブルのすべてのレコードを取得します
$rowset = $bugs->fetchAll();

// 9 番目の要素を取得します<commit_msg>sync Japanese document with r8930.<commit_after><!-- EN-Revision: 8930 -->
<sect1 id="zend.db.table.rowset">

    <title>Zend_Db_Table_Rowset</title>

    <sect2 id="zend.db.table.rowset.introduction">

        <title>導入</title>

        <para>
            テーブルクラスに対して <code>find()</code>
            あるいは <code>fetchAll()</code> メソッドでクエリを実行すると、
            返される結果は <code>Zend_Db_Table_Rowset_Abstract</code> 型のオブジェクトとなります。
            行セットには、<code>Zend_Db_Table_Row_Abstract</code> を継承したオブジェクトが含まれます。
            行セットを使用して各行オブジェクトに対して順にアクセスし、
            行のデータを読み込んだり変更したりすることができます。
        </para>

    </sect2>

    <sect2 id="zend.db.table.rowset.fetch">

        <title>行セットの取得</title>

        <para>
            <code>Zend_Db_Table_Abstract</code> には <code>find()</code> と
            <code>fetchAll()</code> というメソッドがあります。
            これらはどちらも <code>Zend_Db_Table_Rowset_Abstract</code> 型のオブジェクトを返します。
        </para>

        <example id="zend.db.table.rowset.fetch.example">

            <title>行セットの取得の例</title>

            <programlisting role="php"><![CDATA[<?php

$bugs   = new Bugs();
$rowset = $bugs->fetchAll("bug_status = 'NEW'");]]></programlisting>

        </example>

    </sect2>

    <sect2 id="zend.db.table.rowset.rows">

        <title>行セットからの行の取得</title>

        <para>
            通常は、行セットそのものよりもその中に含まれる行のほうが重要になります。
            この節では、行セットを構成する行の情報を取得する方法について説明します。
        </para>

        <para>
            正しい形式のクエリであっても、結果がゼロ行となることがありえます。
            たとえば、抽出条件に一致する行がデータベース内に存在しない場合などです。
            したがって、行セットオブジェクトの中身の行オブジェクトの個数がゼロになることもあります。
            <code>Zend_Db_Table_Rowset_Abstract</code> は
            <code>Countable</code> インターフェイスを実装しているので、
            <code>count()</code> を使用すると行セット内の行の数を調べられます。
        </para>

        <example id="zend.db.table.rowset.rows.counting.example">

            <title>行セット内の行の数を数える</title>

            <programlisting role="php"><![CDATA[<?php

$rowset   = $bugs->fetchAll("bug_status = 'FIXED'");

$rowCount = count($rowset);

if ($rowCount > 0) {
    echo "見つかった行数は $rowCount です";
} else {
    echo 'クエリにマッチする行がありません';
}]]></programlisting>

        </example>

        <example id="zend.db.table.rowset.rows.current.example">

            <title>行セットからの単一の行の読み込み</title>

            <para>
                行セットから行にアクセスするための一番簡単な方法は
                <code>current()</code> メソッドを使用することです。
                これは、行セットに含まれる行数がひとつである場合に最適です。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs   = new Bugs();
$rowset = $bugs->fetchAll("bug_id = 1");
$row    = $rowset->current();]]></programlisting>

        </example>

        <para>
            行セットに含まれる行数がゼロの場合、<code>current()</code>
            が返す値は PHP の <code>null</code> 値となります。
        </para>

        <example id="zend.db.table.rowset.rows.iterate.example">

            <title>行セットの順次処理</title>

            <para>
                <code>Zend_Db_Table_Rowset_Abstract</code> を継承したオブジェクトは
                <code>SeekableIterator</code> インターフェイスを実装しています。つまり、
                <code>foreach</code> ループを使用できるということです。
                これを使用して取得した個々の値は <code>Zend_Db_Table_Row_Abstract</code>
                オブジェクトとなり、これがテーブルの各行に対応します。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs = new Bugs();

// テーブルのすべてのレコードを取得します
$rowset = $bugs->fetchAll();

foreach ($rowset as $row) {

    // 出力は 'Zend_Db_Table_Row' あるいはそれに似たものとなります
    echo get_class($row) . "\n";

    // 行のカラムを読み込みます
    $status = $row->bug_status;

    // 現在の行のカラムの値を変更します
    $row->assigned_to = 'mmouse';

    // 変更をデータベースに書き出します
    $row->save();
}]]></programlisting>

        </example>

         <example id="zend.db.table.rowset.rows.seek.example">

            <title>行セット内の既知の位置への移動</title>

            <para>
                <code>SeekableIterator</code> は、
                イテレータ内の特定の位置に移動することができます。
                そのために使用するのが <code>seek()</code> メソッドです。
                行番号を渡すと、行セット内のその次の位置に移動することができます。
                行番号は 0 から始まることに注意しましょう。
                インデックスが間違っている場合、あるいは存在しない場合は例外がスローされます。
                <code>count()</code> を使って結果の行数を確認してから移動するようにしましょう。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs = new Bugs();

// テーブルのすべてのレコードを取得します
$rowset = $bugs->fetchAll();

// イテレータを 9 番目の要素に移動します (最初の要素がゼロです)
$rowset->seek(8);

// それを取得します
$row9 = $rowset->current();

// そして使用します
$row9->assigned_to = 'mmouse';
$row9->save();]]></programlisting>

        </example>

            <para>
                <code>getRow()</code> は、位置がわかっている場合に
                行セット内の特定の行を取得するためのメソッドです。
                しかし、この位置はゼロから数え始めることを忘れないようにしましょう。
                <code>getRow()</code> の最初のパラメータは、位置を表す整数値です。
                2 番目のパラメータはオプションで、boolean 値を指定します。
                これは、Rowset イテレータも同時にその場所に移動させるのかどうかを表します
                (デフォルトは false です)。このメソッドはデフォルトでは
                Zend_Db_Table_Row オブジェクトを返します。
                指定した位置が存在しない場合は例外をスローします。
                例を示します。
            </para>

            <programlisting role="php"><![CDATA[<?php

$bugs = new Bugs();

// テーブルのすべてのレコードを取得します
$rowset = $bugs->fetchAll();

// 9 番目の要素を取得します
{'fraction_non_alphanumeric': 0.1362355456223885, 'fraction_numerical': 0.004275580604411622, 'mean_word_length': 2.2497631828228606, 'pattern_counts': {'":': 0, '<': 247, '<?xml version=': 0, '>': 263, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1888441', 'n_tokens_mistral': 5239, 'n_tokens_neox': 4734, 'n_words': 464}