Tranzakciók Laravel módra
Számtalanszor előfordulhat, hogy bizonyos adatbázis műveleteket egyben szeretnénk intézni és biztosak akarunk lenni abban, hogy vagy lefut az összes vagy egyik sem.
Létre szeretnénk hozni egy felhasználót és hozzá szeretnénk rendelni pár kategóriát. Biztosak szeretnénk lenni abban, hogy mindkét művelet “egyben” végrehajtódik, egy esetleges hiba esetén viszont egyik sem.
Tehát olyan hibába semmiképpen sem szeretnénk esni, hogy a felhasználó létrejön, de nem rendelődik hozzá egyetlen kategória sem.
A megoldás a DB Facade. A beginTransaction() és a commit() metódusok között lévő adatbázis műveleteket tekintjük atominak, tehát vagy lefutnak sikeresen egyben vagy a rollback() metódusnak köszönhetően gyakorlatilag nem történik semmilyen adatbázis művelet.
A példa természetesen csak prezentálási célokat szolgál, de mondjuk, ha az lenne a cél, hogy a felhasználó kreditpontjait csökkentjük majd ezután adunk neki jogosultságot egy általa kiválasztott tartalomhoz (pl videóhoz), akkor az egy jó példa lehet, hogy biztosak szeretnénk lenni abban, hogy ha levonjuk a pontjait, akkor a kiválaszott videót meg is kapja a felhasználó.
Instagram poszt
További 'Laravel' cikkek
Azt tudjuk, hogy a paginate() metódussal egyszerűen meg lehet oldani a lapozást. De mi a helyzet akkor, ha egy collection-t szeretnék lapozhatóvá tenni?
Biztos neked is volt már olyan feladatod, ahol két modellt kellett összehasonlítani.
Habár a 404-es error page-et automatikusan megjeleníti a Laravel, néha jól jöhet, ha tudunk fallback route-okat létrehozni arra az esetre, ha a kíván route nem található.
Meg szeretnénk vizsgálni egy objektum egyik property-jét és ha az nullish (azaz null vagy undefined), akkor értéket adni neki.
