ciao!

sto cercando di usare le transaction in laravel.
seguendo alcune giude ho fatto così:
codice:
DB::beginTransaction();

try {
    // TESTATE = add_orfo
    $forn = $data['testata']['co_fornitore'];
    $bolla = trim($data['testata']['co_bolla']);
    $dd = date_format(date_create($data['testata']['co_data']), 'Y-m-d H:i:s');
    $note = trim($data['testata']['co_note']);
    $dd2 = date_format(date_create($data['testata']['co_data']), 'Ymd');

    DB::insert('CALL add_orfo(?,?,?,?,?)', array($forn, $bolla, $note, $dd, $dd2));

    // RIGHE = add
    $righe = $data['righe'];
    foreach ($righe as $rr) {
        $caDescr = trim($rr['co_descrizione']);
        $caDizionario = $rr['co_dizionario'];
        $caReparto = $rr['co_reparto'];
        $caBolla = $bolla;
        $caUtente = '';
        $caQta = $rr['co_qta'];
        $caStato = '';
        $caPrezzo = 0;
        $caPrezzoAcq = $rr['co_prezzo'];
        $caOrd = 0;
        $caStag = '';

        $res = DB::select('CALL add_articolo_gest(?,?,?,?,?,?,?,?,?,)', array(
            0, $caDescr, $forn, $caReparto, $caDizionario, $caPrezzo, $caPrezzoAcq, 21, 0, $caStag
        ));

        var_dump($res);
    }

    DB::commit();

} catch (QueryException $ex) {
    DB::rollback();

    return response()->json([
        'res' => 'ko',
        'message' => 'Errore: ' . $ex->getMessage()
    ]);
}
nella query dentro al foreach c'è volutamente un errore.
l'eccezione viene cattirata, ma il rollback non viene eseguito.
nel senso che il record creato nella prima istruzione rimane nella tabella.
dove sto sbagliando??