1

propelには、このクエリによって影響を受ける行の数を返すこのdoUpdate関数があります。

問題は、行を更新する必要がない場合(set値がすでにフィールド値と同じであるため)、それらの行は影響を受ける行としてカウントされるかどうかです。

たとえば、次の表があります。

ID | Name  | Books
1  | S1oon | Me
2  | S1oon | Me

次のクエリと同等のORM関数を作成するとします。

update `new table` set
Books='Me'
where Name='S1oon';

結果はどうなりdoUpdateますか?0を返しますか(すべてのBooks列がすでにMeあるため、更新する必要はありません)、それとも2になりますか(条件を満たす2つの行があるためwhere)?

4

2 に答える 2

2

内部では、Propel は PDO のPDOStatement::rowCount()メソッドを使用して、影響を受ける行の数を返します。したがって、短い答えは、ここで期待どおり「2」を取得するということですが、より長い答えは、特定のデータベースに対して PDO がその関数を実装する方法にわずかに依存する可能性があるということです。(ただし、2 が得られなかった場合は、PDO のバグであると思います。)

詳細については、PHP マニュアルの rowCount() の説明を参照してください。

心に留めておくべきもう1つのことは、Propelがnumber-of-rows-modifiedを返すことが期待されるメソッド( save()delete()など)を呼び出した場合、複数の行が変更される可能性があるということです(たとえば、 Book とその Author を追加し、 book- >save()を呼び出して両方を INSERT すると、変更された行の総数が得られます。

于 2009-09-24T16:53:05.603 に答える
0

2を返します。

于 2009-08-03T11:06:32.573 に答える