laravel、mysql 回滚后事务无法正常工作
laravel, mysql transaction not working once rollback
我正在使用 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 是一个集合,因为你不是在寻找特定的用户,而是在保存整个 table 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
我正在使用 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 是一个集合,因为你不是在寻找特定的用户,而是在保存整个 table 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