Страница 1 из 1

Неявные транзакции

Добавлено: 2014.08.17, 12:09
Besedin
Здравствуйте!

Видел такое в Phalcon Framework. Там возможно инициировать неявную транзакцию например вот так

Код: Выделить всё

<?php

$robotPart = new RobotParts();
$robotPart->type = "head";

$robot = new Robots();
$robot->name = "WALL·E";
$robot->created_at = date("Y-m-d");
$robot->robotPart = $robotPart; // $robot->robotPart - алиас связи с моделью  RobotParts

$robot->save(); //Создает транзакцию автоматически и сохраняет 2 записи
Возможно ли в Yii 2 делать что то на подобие этого?

Re: Неявные транзакции

Добавлено: 2014.08.17, 15:34
Nafania

Re: Неявные транзакции

Добавлено: 2014.08.17, 16:25
Besedin
правильно ли я понимаю?

если я в обоих AR моделях (MainAR и SlaveAR) задам к примеру

Код: Выделить всё

public function transactions() {
  return [
    'default' => self:OP_ALL
  ];
}
 
то в каком нибудь экшене

Код: Выделить всё

public function create() {
  $slaveAr = new SlaveAR();
  $mainAr = new MainAr();
  $slaveAr->save();
  $mainAr->save();
}
 
если $slaveAr->save(); не отработает корректно, то $mainAr->save(); не будет запущен?

Re: Неявные транзакции

Добавлено: 2014.08.17, 18:49
slavcodev
Нет, не правильно. Транзакция начинается при вызове insert, update, delete той модели, где ты прописал transactions(), и сразу же закрывается (естественно в зависимости от сценария).

Чтоб сохранения нескольких моделей были в одной транзакции, ты должен их сохранять в beforeSave и afterSave (beforeDelete/afterDelete)

Другими словами, если ты определил MainAR::transaction(), то транзакция начнется в момент вызова MainAR::save(), и все запросы что будут между beforeSave и до afterSave, будут выполнены в этой транзакции.

Re: Неявные транзакции

Добавлено: 2014.08.17, 19:37
Besedin
Спасибо! Уже кажется разобрался. В код Yii подсмотрел.