2013-10-14 2 views
1

Yii сделка не откат в приведенном ниже примере кода и записи, сохраненной в БД:Yii сделка doen't откат

 $transaction = Yii::app()->db->beginTransaction(); 
     $mode_1 = new Orders; 
     $mode_1->id_order = 3333; 
     $mode_1->AWB = 3333; 
     $mode_2 = new Orders; 
     $mode_2->id_order = 4444; 
     $mode_2->AWB = 4444; 
     $mode_2->save(); 
     $mode_1->save(); 
    $transaction->rollback(); 

любая идея? .. thanks

+0

Возможный дубликат [Транзакция не работает в Yii] (http://stackoverflow.com/questions/13789965/transaction-doesnt-work-in-yii) – trejder

ответ

5

Убедитесь, что движок хранения для ваших столов - InnoDB. Я считаю, что это единственный доступный по транзакциям механизм по умолчанию. Больше о доступных двигателях в mysql docs

+0

Да, он отлично работает сейчас. Я изменил свой движок таблицы от MyISAM до InnoDB .. спасибо за ваш совет :) – hishamaborobnaser

+0

Ты меня тоже спас. Работа, подобная Charm – Turikumwe

11

Правильный способ использования транзакций - использовать их с конструкцией try-catch. В вашем примере я думаю, что проблема возникает из-за того, что вы не сделали commit ($ transaction-> commit()).

$transaction = Yii::app()->db->beginTransaction(); 
try { 
    if (!$model->save()) { 
     throw new Exception('Model cannot be saved.'); 
    } 
    if (!$anothermodel->save()) { 
     throw new Exception('Anothermodel cannot be saved.'); 
    } 

    $transaction->commit(); 
} catch (Exception $e) { 
    $transaction->rollback(); 
} 

EDIT: $ модели-> Сохранить() не выбрасывает исключение, так что вам нужно, чтобы бросить его!

+0

На самом деле установка try-catch не влияет ни на что. – hishamaborobnaser

+0

Но в этом случае вы не можете иметь модель сохранения, совершить транзакцию и транзакцию возврата в одно и то же время. И странно успешно сохранять данные в БД и после данных, чтобы отменить транзакцию. – eXtreme

+1

Хотя этот ответ, возможно, не решил ваш вопрос, этот ответ, однако, учит правильному способу совершения транзакции. Это причина для голосования прямо там! –

Смежные вопросы