Php 如何使用DB::Tranactions将数据插入到单个控制器中的两个表中
我想注册一个用户并将数据插入account表,同时插入account的user_id作为创建的用户id,我从我的admin controller执行此操作Php 如何使用DB::Tranactions将数据插入到单个控制器中的两个表中,php,laravel,Php,Laravel,我想注册一个用户并将数据插入account表,同时插入account的user_id作为创建的用户id,我从我的admin controller执行此操作 public function store(StoreUsersRequest $request) { DB::transaction(function($request) { $newUser = User::create($request->all());
public function store(StoreUsersRequest $request)
{
DB::transaction(function($request)
{
$newUser = User::create($request->all());
$newAccounts = Accounts::create([
'user_id' => $newUser->id,
'balance' => '0',
'amt' => '0',
]);
if( !$newAccounts )
{
throw new \Exception('accounts not created for new user');
}
});
return redirect()->route('users.create');
}
有人能告诉我怎么做吗?试试这个代码。我假定您的表名为accounts
try {
DB::beginTransaction();
$newUser = User::create($request->all());
$newAccounts = Accounts::create([
'user_id' => $newUser->id,
'balance' => '0',
'amt' => '0',
]);
DB::commit();
} catch (\Exception $e) {
DB::rollback();
throw new \Exception('accounts not created for new user');
}
$result = DB::transaction(function () use ($request) {
$data = new User;
$data->name = $request->name;
$data->other_values = $request->values;
$data->save();
DB::table('accounts')->insert(['user_id' => $data->id, 'balance' => '0', 'amount' => '0']);
return true;
}, 5);
if($result) {
// Redirect after successful execution
return redirect()->route('users.create');
} else {
// Redirect after unsuccessful execution
Session::flash('failed','Oops, accounts not created for new user');
return redirect()->route('previous.route');
}
视图文件
@if (session('failed'))
<div class="alert alert-danger">
{{ session('failed') }}
</div>
@endif
它将此错误返回到未为新帐户创建的帐户user@TobyNwude您将无法定位问题本身,因此请尝试记录异常。您正试图通过传递整个请求来创建用户。你检查过可填充部分了吗?是的,我最初让控制器只在用户表中创建用户,结果是working@hamidAli如何记录expectiontry{//验证值…}捕获异常$e{报告$e;返回false;}您正在使用批量分配,您是否检查了相应模型上的所有字段是否在相应的模型字段中进行了标记?我想创建一个新用户并将值插入account表。该函数是否还会创建新用户?是的,请尝试一下。我正在我的一个项目中使用此代码