// короткий и наглядный способ $customer = Customer::findOne(123); Customer::getDb()->transaction(function($db) use ($customer) { $customer->id = 200; $customer->save(); // ...другие операции с базой данных... }); // или по-другому $transaction = Customer::getDb()->beginTransaction(); try { $customer->id = 200; $customer->save(); // ...другие операции с базой данных... $transaction->commit(); } catch(\Exception $e) { $transaction->rollBack(); throw $e; } В модели можно задать сценарии и операции, которые должны происходить в транзакциях class Customer extends ActiveRecord { public function transactions() { return [ 'admin' => self::OP_INSERT, 'api' => self::OP_INSERT | self::OP_UPDATE | self::OP_DELETE, // вышеприведённая строка эквивалентна следующей: // 'api' => self::OP_ALL, ]; } }
Yii Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor