Кохана транзакций на нескольких столах - PullRequest
1 голос
/ 05 декабря 2011

У меня есть веб-сайт на основе Kohana 3.0.14, и я хочу использовать транзакции в определенных моделях.Каков наилучший подход?Также: как я могу использовать транзакции для нескольких таблиц?(как я могу заблокировать несколько таблиц одновременно)?Сейчас я делаю:

   DB::query(NULL, 'START TRANSACTION');            
        $contents = ORM::factory('basket_contents');
        $contents->product_type = $product_type;
        $contents->category = $product->category;
        $contents->basket = $this;
        $contents->save();
   DB::query(NULL, 'COMMIT');

Но я хочу заблокировать 2 таблицы: корзину и содержимое.Не уверен, что я делаю это правильно.Каков наилучший подход для использования транзакций с Kohana 3?

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Kohana 3, по-видимому, имеет методы транзакций, хотя они, похоже, не документированы.См. эту ссылку

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

Вы не говорите, какую БД вы используете, но в случае, если вы используете MySQL, обратите внимание, что таблицы MySQL MyISAM (наиболее распространенный тип) не поддерживают транзакции - вам нужно использовать InnoDB с MySql.

0 голосов
/ 08 апреля 2012

Я создал модуль Kohana, который значительно упрощает использование транзакций:

https://github.com/brazzy/kohana-transactional

Однако для этого требуется как минимум Kohana 3.1 и, конечно, для MySQL также нужны таблицы для использования InnoDB.

...