В документации Propel2 ORM (http://propelorm.org/documentation/05-transactions.html) есть пример, как обернуть запросы внутри транзакции. Подключение производится к единой базе данных таблицы «Аккаунт»:
$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME);
Как я могу получить глобальный объект соединения PDO или соединение с 2 таблицами (например, «Учетная запись» и «Книга»)?
Например, это (в псевдокоде), что я хочу иметь:
$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME,
BookTableMap::DATABASE_NAME);
Пример, который вы цитируете, довольно прост. Ваша ошибка — думать так, как вы говорите в своем вопросе Подключение производится к единой базе данных таблицы «Аккаунт»:. Нет связи всегда с целой базой данных. Propel просто предоставляет способ получить дескриптор соединения, в котором в качестве параметра используется таблица, что сбивает с толку, я даю вам.
Ты сделаешь
$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME);
на любом столе, просто чтобы получить $con
ручка подключения.
Транзакции контролируются связью, а не заявлением. Поэтому, когда у вас есть объект подключения, вы можете начать транзакцию, и весь смысл транзакции заключается в том, что вы можете изменить любое количество таблиц в этой транзакции как одну единицу работы (транзакцию).
Итак, когда у вас есть $con
справиться с началом сделки
$con->beginTransaction();
и любые поправки, которые вы делаете между этим заявлением и
$con->commit();
ИЛИ ЖЕ
$con->rollback();
Будут ли все совершаться вместе или все будут отменены вместе.
Других решений пока нет …