Idealne rozwiązanie dla mnie byłoby włożenie modelu macierzystego z niektórymi stowarzyszeniami dziecięcej i utworzyć na kaskadzie stowarzyszeń dzieci. Jednak, ponieważ zaczynam od kontynuowania i udało mi się uzyskać tę pracę, muszę wstawić dane i skonfigurować stowarzyszenia ręcznie do tej pory, aby to pracować.

Zasadniczo, po wstawieniu wiersza nadrzędnego, muszę być w stanie uzyskać autoincremented ID (sekwencja zarządzana przez MySQL, a nie seklizację), aby przypisać ten identyfikator jako klucz obcy dla podmiotu podrzędnego. Idealnie chciałbym wykonać wszystko atomowo w transakcji, więc jeśli coś pójdzie nie tak, wycofujemy wszystko. To powiedziane, chyba że popełniam transakcję ręcznie po wprowadzeniu, nie jestem w stanie uzyskać identyfikatora jednostki dominującej. Czy istnieje sposób na przeczytanie wartości przed transakcją został popełniony, trochę brudnych czytania?

To jest dotychczasowy kod:

const ipiInterestedParty = {
            ip_base_nr: '118',
        };
    const transaction = await session.transaction();
    const instance = await IpiInterestedParty.create(ipiInterestedParty, {transaction});
    await transaction.commit();
        const createdWithId = await IpiInterestedParty.findOne({
            where: {ip_base_nr: '118'}
        });

Jest to jedyny sposób, w jaki udało mi się uzyskać identyfikator rodzica, ponieważ transakcja została już popełniona, w przypadku, gdy po tym istnieje każdy błąd, transakcja została popełniona i nie może zostać cofnięta, pozostawiając niespójny system .

Proszę o pomoc?

0
fgonzalez 16 wrzesień 2020, 17:57

1 odpowiedź

Najlepsza odpowiedź

Zwykle otrzymujesz instance z podstawową wartością klucza po wykonaniu create Metoda modelu, jeśli wskazałeś w PK modelu autoIncrement: true. Tak więc masz już identyfikator rekordu {x3}}, aby utworzyć rekordy dziecka. Nie zapomnij przekazać obiektu transakcyjnego do wszystkich metod, które sprawiają, że Crud wewnątrz transakcji.

1
Anatoly 16 wrzesień 2020, 15:06