【问题标题】:laravel, mysql transaction not working once rollbacklaravel,mysql事务一旦回滚就不起作用
【发布时间】:2020-04-29 05:32:30
【问题描述】:

我正在使用 laravel 5.8 同时在 4 个表中执行插入操作。当我提交不完整的表格时,它会显示错误,之后再次提交正确的数据时,它会显示数据库错误

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`matrimonial_db`.`personal_details`, CONSTRAINT `personal_details_ibfk_1` FOREIGN KEY (`site_user_id`) REFERENCES `siteuser` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) (SQL: insert into `personal_details` (`site_user_id`, `updated_at`, `created_at`) values (148, 2020-04-29 05:16:53, 2020-04-29 05:16:53))

第一次填写表格时,它成功地在所有表中插入数据,但再次尝试时它会显示错误。 这是代码

try
        {
            $connection = DB::connection('mysql');
            $connection->beginTransaction();
            $userData = session()->get('registeruser_data');
            $userData->user_type = 'v';
            $userData->save();

            $personal_details= new PersonalDetail;
            $personal_details->site_user_id =$userData->id;
            $personal_details->save();

            $personal_bio= new PersonalBio;
            $personal_bio->site_user_id =$userData->id;
            $personal_bio->save();


            $partner_details= new PartnerDetail;
            $partner_details->site_user_id =$userData->id;
            $partner_details->save();

            $personal_img= new PersonalImage;
            $personal_img->site_user_id =$userData->id;
            $personal_img->save();

            $connection->commit();
            session(['siteuser' => $userData->id]);
            return redirect('/edit/profile');
            // dd($charge);

        }
        catch(Exception $ex)
        {
            $connection->rollBack();
            return redirect::back()->withErrors(['stripe'=>$ex->getMessage()]);
        }

【问题讨论】:

  • 在您对其他表进行交易之前,请尝试打印出您的$userData->id。是否可用
  • 我尝试了可用的@Saengdaet
  • 可能是因为您的siteuser 中没有id。就像您尝试插入 site_user_id = 148,但您的 siteuser 不包含 id = 148
  • 你可以看到 id 也显示在错误消息查询中它发生在第二次尝试第一次尝试数据添加成功如果我尝试使用错误的输入进行测试它不插入数据并且当我再次通过正确的输入时它显示我上面提到的错误
  • 对不起,我没注意到id

标签: php mysql laravel laravel-5 laravel-5.8


【解决方案1】:

先检查外键

$userData 是一个集合,因为您不是在寻找特定的用户,而是在保存整个表 registeruser_data,所以我建议您使用 eloquent,因为它会更容易

您正在寻找这样的用户:

$user = yourModelUser::find($idUser);

$user = yourModelUser::where('id' $idUser)->where('type', 'v')->first();

然后:

$user->type = 'n';
$user->save();

如果您需要更多查询,可以查看官方文档: https://laravel.com/docs/7.x/eloquent

【讨论】:

  • 在之前的请求中,我将 eloquent 模型保存在会话 registeruser_data 中。模型是用所有注册数据创建的,但我想最后把它和其他表一起保存,所以registeruser_data 不是一个集合,而是一个雄辩的模型对象
猜你喜欢
  • 2018-05-01
  • 2017-07-18
  • 2017-02-18
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多