Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте. Использую Laravel 5.2. Возникла проблема с транзакцией
protected function create(array $data, $basket){
DB::transaction(function() use ($data, $basket){
try{
$order = Orders::create([
'name' => $data['name'],
'phone' => $data['phone'],
'adress' => $data['adress'],
]);
$basket->each(function($item, $key) use ($order){
Goods::create([
'order' => $order->id,
'good' => $item->get('id'),
'quantity' => $item->get('quantity'),
]);
});
}
catch(Exception $e){
DB::rollback();
}
});
}
При добавлении в таблицу Goods я делаю ошибку и получаю QueryException. Но в таблицу Orders данные все равно добавляются. Что я делаю не так?
Не в сети
Не в сети
DB::commit() пока нету, потому что я хочу для начала отменить транзакцию.
Если верить документации, то при использовании синтаксиса DB::transaction(function() {...}); вообще не нужно ни rollback, ни commit. Но ни так ни так не добился должного результата.
Пробовал и в камэлКэйсе и так, но результат один и тот же. И не появляется ошибка что метьод не найден.
Не в сети
DB::beginTransaction();
try{
$order = DB::table('orders')->insertGetId([
'name' => $data['name'],
'phone' => $data['phone'],
'adress' => $data['adress'],
]);
DB::table('goods')->insert([
'order' => $order,
'good' => $data['phone'],
'quantity' => $data['phone'],
]);
}
catch(QueryException $e){
DB::rollBack();
}
DB::commit();
Никакого эффекта.
Не в сети
Решил проблему. Она оказалась в том, что таблицы были в MyIsam. Поставил в InnoDB и все стало работать.
Не в сети
Решил проблему. Она оказалась в том, что таблицы были в MyIsam. Поставил в InnoDB и все стало работать.
Это грустно - MyISAM иногда нужен. К примеру, InnoDB не поддерживает spatial-индексы.
Не в сети
Страницы 1