У меня проблема с транзакциями в laravel.
Когда я пытаюсь выполнить эту операцию со следующим кодом, на экране появляется ошибка, как будто у меня не было транзакции.
\DB::transaction(function() use ($movement, $movementRows) {
$movement->save();
$movement->rows()->saveMany($movementRows);
});
и когда я пытаюсь сделать это с кодом ниже, первый объект сохраняется, хотя второй не удается.
\DB::beginTransaction();
try {
$movement->save();
$movement->rows()->saveMany($movementRows);
\DB::commit();
$success = true;
} catch (\Exception $e) {
$success = false;
\DB::rollback();
}
if ($success) {
// the transaction worked ...
}
Убедитесь, что вы используете движок, который поддерживает транзакции. InnoDB поддерживает транзакции, а MyIsam — нет. Так что откройте свою базу данных, например, в PhpMyAdmin и убедитесь, что для всех таблиц установлено значение InnoDB, а не MyISAM (при условии, что вы используете MySQL — вы не упомянули, какую базу данных вы используете).
Других решений пока нет …