2017-06-26 20 views
1

誰でも手伝ってください!私のプロジェクトで 、私はロック・レコードとの取引があります。私の場合はLaravelエラーロックデータベース対トランザクション休憩

namespace App\Console\Commands; 

use Illuminate\Console\Command; 

class Testing extends Command { 
    protected function handling() 
    { 
     DB::beginTransaction(); 
     try { 
      $posts = Posts::lockForUpdate()->find(1); 

      //run step 1 

      //run step 2 

      //run step 3 

     } catch (\Exception $e) { 
      DB::rollback(); 
     } 
    } 
} 

を、私はそれを実行している場合、コマンドからそれを呼び出す:

php artisan test:run 

... 
running step 1 
... 
... 
running step 2 
.. 
.. 
Ctrl C 

-> quit command. 

トランザクションコミットと永遠にレコードをロックしません。

私はforce quitコマンドでトランザクションをコミットできますか?

答えて

0

あなたは私がコマンドをキャンセルする場合、 `` ` PHPの職人のテストをDB:commit();

として
DB::beginTransaction(); 
     try { 
      $posts = Posts::lockForUpdate()->find(1); 

      //run step 1 

      //run step 2 

      //run step 3 
      DB::commit(); 

     } catch (\Exception $e) { 
      DB::rollback(); 
     } 
+0

を使用してコミットする必要があり、その後DB::beginTransaction();を使用している場合は、次の手順1 を実行している ... を実行します。.. ... running step 2 .. .. Ctrl C - > quitコマンドです。 '' ' トランザクションはコミットされません。ロックは解放されません。だから、レコードをロックしてデータベースを更新できません。 強制終了時にトランザクションをコミットする方法laravel –