Laravel по-русски
      
      
    Русское сообщество разработки на 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