

いつもお世話になっております。  
Laravel5.8/php7.3 にて開発をしております。  
複数テーブルのinsertの処理があったので`\DB::transaction`を使ってトランザクションの処理を行っております。

ローカル環境では、なんの問題もなく複数テーブルの登録が出来たのですが、本番環境にアップするとなぜか登録がされない状況です。

[code]

    function __invoke() {
        $uesr = $this->store();
        var_dump($user); // <- 登録した内容が取得出来ているし、新規登録されたIDも発番されている
    }
    function store() {
        return \DB::transaction(function () use () {
            $data = ['email'=>'test@mail.com', name'=>'test'];
            $user = new User;
            $user->fill($data)->save();
    
            $post = Post::create(['user_id'=>$user->id]);
            return $user;
        });
    }
    
[/code]

上記のように、transactionの処理が完了し、var_dumpでは新規に発番されたIDの取得は出来ております。  
ただ、データベースには登録されておらず、ロールバックされてしまっているような動きをしております。

  * トランザクションの処理をやめれば、正常に登録される
  * トランザクション内でエラー(Exception)発生時にはvar_dumpまでは表示されないこと

などは、確認しているのですが、他に確認する点、修正すべき点等がございましたら、ご教授頂けますと幸いでございます。

何卒、よろしくお願いいたします。


CC BY-SA 4.0
2019-08-09T04:58:08.967
57265
2023-02-05T14:08:10.997
2019-08-12T22:58:00.270
8755
8755
question
php laravel-5
Laravel5.8でtransactionでなぜかロールバックされてしまう


$user_idは$user->idではないでしょうか？

蛇足ですが、transactionはtry/catchで囲むとロールバックした際に例外をキャッチできるので、原因をつかみやすいです。  
あと、userとpostがリレーションしている場合は、「関連したモデルの挿入」を使ったほうが、idを意識しなくてすみます。

[code]

    try {
        $user = \DB::transaction(function () {
            // 保存
            $user = User::create(['email'=>'test@mail.com', 'name'=>'test']);
            $post = $user->posts()->create(['comment' => 'コメント']);
            return $user;
        )};
    } catch (\Exception $e) {
        report($e);
        // ロールバック時の処理
    }
    
[/code]

※ コードはタイポなどあるかもしれません。


CC BY-SA 4.0
2019-08-10T02:08:44.247
57283
2019-08-13T00:48:27.987
2019-08-13T00:48:27.987
9948
9948
57265
answer