Search code examples
phpmysqlmysqlilaravel-5sqltransaction

how to use SQL Transaction in laravel 5.4?


how to use Sql Transaction in this code sample. i tried but transaction is not working properly. my database engine is InnoDB.

 DB::transaction(function() use($request  ) {
 $user = User::$request->only('name','mobile','address');
 $userSave = User::create($user)->id;

 foreach ( $request->subjects as $items)
 {

  $data = User::$request->only('name');
   $data['student_id'] = $userSave
    $subject= Subject::create($data);

   }
  } //sql transaction end

I can not explain this better way .. so please read code and correct it. if i am wrong. problem is, it is not rollback if subject model query gone failed.


Solution

  • you forgot to DB::commit();

    Without this your code will not work.

    You should write DB:commit after foreach() statement

     DB::transaction(function() use($request  ) {
     $user = User::$request->only('name','mobile','address');
     $userSave = User::create($user)->id;
    
      foreach ( $request->subjects as $items)
      {
    
          $data = User::$request->only('name');
          $data['student_id'] = $userSave
          $subject= Subject::create($data);
       }
        DB::commit();
     } //sql transaction end