首先检查所有模型是否可以保存.然后保存



首先检查模型是否可以保存。然后保存。

我试图保存查询中的数据。我有3个问题:

$message_header->save();
$save_receive_info->save_receive_info_id = $message_header->id;
$information_receive->save();
$information_chargeline->save_receive_info_details_id = $information_receive->id;
$maklumat_chargeline->save();

因此,基于这个查询,它首先保存$message_header,然后如果save_receive_info,但如果receive_info在保存时出错,我该怎么办?

我的意思是,我想检查所有查询是否都是可执行的,然后保存。我对此有一个问题,因为其他查询是基于其他id 存储的

请帮忙。很抱歉我英语不好。

您可以在DB事务中使用try-and-catch块。

use IlluminateSupportFacadesDB;

DB::beginTransaction();
try {
// your code logic before save
$message_header->save();
$save_receive_info->save_receive_info_id = $message_header->id;
$information_receive->save();
$information_chargeline->save_receive_info_details_id = $information_receive->id;
$maklumat_chargeline->save();
DB::commit();
// all good
} catch (Exception $e) {
DB::rollback();
// something went wrong
}

您不能在执行之前检查查询是否可执行,但您可以使用DB Transactions实现类似的功能。

因此,如果您可以使用DB Transactions,它将执行所有查询,如果某个操作失败,它将撤消您以前执行的所有查询。

use IlluminateSupportFacadesDB;
try {
DB::beginTransaction();
$message_header->save();
$save_receive_info->save_receive_info_id = $message_header->id;
$information_receive->save();
$information_chargeline->save_receive_info_details_id = $information_receive->id;
$maklumat_chargeline->save();
DB::commit();

} catch (Throwable $th) {
DB::rollBack();
}

最新更新