我的表列 entry_id 列设置为unique ...
是否有使用尝试&捕获和DB ::回滚以修改我的变量?例如:
$_id = 1
$entryId = 'test0000'+$_id;
DB::beginTransaction();
try {
$sub = Submission::create([
'entry_id' => $entryId,
]);
DB::commit();
// success insert..
} catch (Exception $e) {
DB::rollback();
//detected unique... just ++ _id to ensure not unique
$_id++;
// throw $e;
} catch (Throwable $e) {
DB::rollback();
//detected unique... just ++ _id to ensure not unique
$_id++;
// throw $e;
}
第一次没有错误,我可以知道第二次,以确保 entry_id 不是唯一的,我可以使用回滚方法输入 吗?这是正确的方式吗?
谢谢!
我认为在您的情况下,最好使用封闭。
DB::transaction(function() use ($entryId)
{
$sub = Submission::create([
'entry_id' => $entryId,
]);
});
您可以将查询链接在封闭中,如果任何时候失败,它将自动运行回滚。
检查您的表是否引擎= myisam
并将其更改为Innodb
在Laravel Open Config/database.php中在MySQL集合中=>'innodb'
'connections' => [
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => "InnoDB",
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
],
在那个新鲜的迁移之后要更改数据库中的引擎