Laravel Eloquent (PDO): убедитесь, что транзакция активна

Я считаю, что это должен быть простой ответ. Однако я не смог найти прямого ответа ни в документах, ни где-либо еще.

В среде PHP Laravel у меня есть ситуация, подобная следующей, когда я открываю транзакцию базы данных:

(Конечно, мой пример сильно упрощен по сравнению с реальными вещами, с которыми я работаю, поэтому, пожалуйста, воздержитесь от ответов типа «почему вы так делаете?»). Меня интересует этот принцип.

try {

    if ($conditions == $criteria) {
       DB::connection('oracle')->beginTransaction();
    }
    // blah...

Позже в коде я просто хочу проверить, выполняется ли транзакция. Псевдокод для моего оператора условия будет выглядеть примерно так:

    if ( DB::connection('oracle')->transactionIsOngoing() ) {

        // do some stuff with the on-going transaction
        DB::connection('oracle')->commit();

        // if I were to execute "DB::connection('oracle')->transactionIsOngoing()"
        // again here it would return FALSE, because the commit command has
        // completed the open transaction

    }

Каков фактический код, который мне следует использовать для замены DB::connection('oracle')->transactionIsOngoing()?

Illuminate\Database\ConnectionInterface::transaction имеет свойство transactionLevel, которое возвращает количество активных транзакций, не уверен, пригодится ли это вам. laravel.com/api/5.6/Illuminate/Database/…
Joe 13.04.2018 12:01

@joe Ты прав. Ответ действительно такой простой! Поставьте это как ответ. :-)

cartbeforehorse 13.04.2018 12:28

Добавил в ответ @cartbeforehorse, рад, что помог!

Joe 13.04.2018 12:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
2 375
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Illuminate\Database\ConnectionInterface::transaction имеет свойство transactionLevel, которое возвращает количество активных транзакций.

Документацию можно найти здесь: https://laravel.com/api/5.6/Illuminate/Database/ConnectionInterface.html#method_transactionLevel

Конечно, это всего лишь интерфейс. Если вы хотите получить фактический уровень транзакции, вы должны использовать Illuminate\Support\Facades\DB::transactionLevel()

RonnyKnoxville 18.02.2020 18:01

Другие вопросы по теме