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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

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

Сообщение 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 делать что то на подобие этого?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

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

Сообщение Nafania »

Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

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

Сообщение 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(); не будет запущен?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

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

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

Другими словами, если ты определил MainAR::transaction(), то транзакция начнется в момент вызова MainAR::save(), и все запросы что будут между beforeSave и до afterSave, будут выполнены в этой транзакции.
Жду Yii 3!
Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

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

Сообщение Besedin »

Спасибо! Уже кажется разобрался. В код Yii подсмотрел.
Ответить