Транзакция с более чем одной таблицей в Propel2

В документации 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);

1

Решение

Пример, который вы цитируете, довольно прост. Ваша ошибка — думать так, как вы говорите в своем вопросе Подключение производится к единой базе данных таблицы «Аккаунт»:. Нет связи всегда с целой базой данных. Propel просто предоставляет способ получить дескриптор соединения, в котором в качестве параметра используется таблица, что сбивает с толку, я даю вам.

Ты сделаешь

$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME);

на любом столе, просто чтобы получить $con ручка подключения.

Транзакции контролируются связью, а не заявлением. Поэтому, когда у вас есть объект подключения, вы можете начать транзакцию, и весь смысл транзакции заключается в том, что вы можете изменить любое количество таблиц в этой транзакции как одну единицу работы (транзакцию).

Итак, когда у вас есть $con справиться с началом сделки

$con->beginTransaction();

и любые поправки, которые вы делаете между этим заявлением и

$con->commit();

ИЛИ ЖЕ

$con->rollback();

Будут ли все совершаться вместе или все будут отменены вместе.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]