控制器代码:
public function update(ContractTypeStoreAndUpdateRequest $request, ContractType $contractType): ContractTypeResource
{
$contractType->is_active = $request->input('is_active');
$contractType->name = $request->input('name');
$contractType->short_name = $request->input('short_name');
$contractType->description = $request->input('description');
$pdo = DB::connection()->getPdo();
$pdo->exec('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
DB::beginTransaction();
if ($request->has('feature')) {
if ($contractType->contracts()->count() !== 0) {
throw ValidationException::withMessages(
[
'feature' => 'Тип договора имеет привязанный договор изменить невозможно',
]
);
}
$contractType->feature = $request->input('feature');
}
$contractType->save();
DB::commit();
return ContractTypeResource::make($contractType);
}
当我对此进行测试时,出现以下错误:
活动sql事务:1568事务特征不能为进行交易时更改]
我理解该错误消息,但是我无法假定transaction
可能从哪里开始?引擎盖下的Laravel
是否对transaction
做一些事情(验证,认证)?如何找到交易开始的地方?
我有原因。
我的测试使用此特征\Illuminate\Foundation\Testing\DatabaseTransactions
涵盖交易中的测试。最后会回滚以保持数据库干净。