私は CodeIgniter で DataMapper ORM を初めて使用します。これが私の質問です。マニュアルによると:
この方法には注意してください。whereステートメントまたは同様のメソッドで制限することなく、テーブルのすべての行を変更します!
また、このメソッドは検証をバイパスし、テーブル内の外部キーでも操作できるため、リスクに注意してください。
更新メソッドが検証をバイパスする場合、更新前に検証するレコードを更新する方法は何ですか? サンプルコードをいただければ幸いです。
私は CodeIgniter で DataMapper ORM を初めて使用します。これが私の質問です。マニュアルによると:
この方法には注意してください。whereステートメントまたは同様のメソッドで制限することなく、テーブルのすべての行を変更します!
また、このメソッドは検証をバイパスし、テーブル内の外部キーでも操作できるため、リスクに注意してください。
更新メソッドが検証をバイパスする場合、更新前に検証するレコードを更新する方法は何ですか? サンプルコードをいただければ幸いです。
update()メソッドは、$ this-> db-> update()のエイリアスにすぎません。
更新されたレコードに更新タイムスタンプを追加する必要があるかどうかのみをチェックし、渡されたフィールドが更新するテーブルに存在することを確認します。
オブジェクトを更新するには、save()を使用します。INSERTまたはUPDATEが必要かどうかを自動的に判断します。
$obj->save(); を試すと、および動的検証ルール (一部の $_POST 変数に依存) であり、まだ検証がありません。
$obj->force_validation(); を使用してみてください。$obj->save(); の前に
DataMapper ORM は、最初にフェッチしたデータに対してしか検証できないため、検証できません。を使用UPDATE
すると、MySQL は最終的な PHP 検証関数をチェックせずにフィールドを変更できます。
解決策は、最初に必要なすべての行を取得し、save()
関数を使用することです。次に、PHP 側の検証が行われます。
http://datamapper.wanwizard.eu/pages/save.html
私は DataMapper ORM に少し慣れていませんが、何をすべきかを説明する例を次に示します。
$users = new User();
$users->where('age', 25)->get();
foreach($users as $user)
{
$user->age = 26;
$user->save();
}