Я считаю, что это должен быть простой ответ. Однако я не смог найти прямого ответа ни в документах, ни где-либо еще.
В среде 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()?
@joe Ты прав. Ответ действительно такой простой! Поставьте это как ответ. :-)
Добавил в ответ @cartbeforehorse, рад, что помог!






Illuminate\Database\ConnectionInterface::transaction имеет свойство transactionLevel, которое возвращает количество активных транзакций.
Документацию можно найти здесь: https://laravel.com/api/5.6/Illuminate/Database/ConnectionInterface.html#method_transactionLevel
Конечно, это всего лишь интерфейс. Если вы хотите получить фактический уровень транзакции, вы должны использовать Illuminate\Support\Facades\DB::transactionLevel()
Illuminate\Database\ConnectionInterface::transactionимеет свойствоtransactionLevel, которое возвращает количество активных транзакций, не уверен, пригодится ли это вам. laravel.com/api/5.6/Illuminate/Database/…