控制器代码:
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
做些什么(验证,认证)?
如何找到交易开始的地方?
答案 0 :(得分:2)
我有原因。
我的测试使用此特征\Illuminate\Foundation\Testing\DatabaseTransactions
涵盖交易中的测试。最后会回滚以保持数据库干净。