(^)
SDO_DAS_Relational::applyChanges — データグラフに対する変更を、データベースに書き戻す
この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。
PDO データベースハンドルとデータグラフのルートオブジェクトを受け取り、 データグラフの変更内容を吟味したうえで、その変更内容をデータベースに適用します。 適用される変更の内容は、データオブジェクトの作成や削除、 そしてデータオブジェクトのプロパティへの変更です。
PDO 拡張モジュールを使用して作成されます。 PDO データベースハンドルを作成する典型的な方法は、このようになります。
$dbh = new PDO("mysql:dbname=COMPANYDB;host=localhost",DATABASE_USER,DATABASE_PASSWORD);
特別なルートオブジェクトで、これはすべての SDO データグラフのトップレベルにあります。
なし。しかし、渡されたデータグラフは何も変更されず、 そのまま使用可能なことに注意しましょう。 さらに、もしデータオブジェクトの作成の際にテーブルの主キーを自動生成していたのなら、 その主キーの値がここでデータオブジェクトに設定されます。 変更内容の書き込みが正常に終了すると、そのデータグラフに関連する 変更概要が消去されます。これにより、 そのデータグラフにさらに変更を加えてはそれを適用するといったことが可能になります。 この方法により、同じデータグラフを使用して繰り返し変更内容を適用することができます。
SDO_DAS_Relational::applyChanges() は、変更内容を正しく適用できなかった場合に SDO_DAS_Relational_Exception をスローします。
リレーショナル DAS は、変更内容の適用を始める前に データベースのトランザクションを開始します。 そして、変更内容がすべて正常に適用できた場合にのみそれをコミットします。 リレーショナル DAS は、更新あるいは削除する行を指定するための適切な where 句を含む update 文あるいは delete 文を作成します。これは、 データを最初に取得した際の値に基づいて作成されます。 これにより、楽観的な同時並行性 (concurrency) が実装されています。 この update 文や delete 文が更新、削除に失敗したとすると、 その原因はおそらく、最初にデータを取得した後で データベース内のデータが変更されたことでしょう。 どんな場合でも、もし何らかの理由で更新が失敗したら トランザクションはロールバックされます。そして例外がスローされます。 例外の中には、失敗した SQL 文が含まれています。
リレーショナル DAS は、PDO の例外も捕捉します。その中に含まれる PDO の診断情報を SDO_DAS_Relational_Exception に格納し、それをスローします。