Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 2.04.2010 Skąd: Częstochowa Ostrzeżenie: (0%)
|
Witam,
wydaje mi się, że moje pytanie jest banalnie proste, ale mój mózg już chyba dzisiaj przestał pracować, nawet nie wiem jak szukać rozwiązania. Praca inżynierska goni... Mianowicie: Sprawdzam czy istnieje rekord w bazie, jeżeli nie istnieje to tworzę nowy. Podczas przytrzymania F5 rekordów dodaje się kilka. Klucz unique w bazie nie wchodzi w grę.
Dodam tylko, że User i JakisItem są połączone relacją One to Many, a metoda jakis_item() klasy User zwraca pojedynczy obiekt Eloquenta. Chodzi mi o to żeby każdy użytkownik miał ZAWSZE minimum jeden JakisItem, który może, np zmienić właściciela i wtedy chcę utworzyć nowy. Kod powyżej wykonuje się po każdym odświeżeniu strony i sprawdza czy ten item nie zniknął (jest w konstruktorze kontrolera). Podczas tworzenia użytkownika w metodzie postRegister klasy kontrolera AuthController tworzę rekord tak jak powyżej. Jeśli jest na to jakiś lepszy sposób bardzo proszę o nakierowanie na niego. Pozdrawiam! |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 2.04.2010 Skąd: Częstochowa Ostrzeżenie: (0%)
|
Piszę tu ponieważ nie chciałem zakładać nowego podobnego tematu.
Drugi dzień próbuję zrobić kolejkę budowy w mojej grze. Próbowałem już "na żywo" obliczać czas startu i końca budowy, ale skończyło się milionem warunków w pętli, które w działały dopóki ktoś nie zaczął kombinować, np anulować kilka zadań budowy na raz, szybko dodawać kolejne itp. W tej chwili czas startu i zakończenia przechowuje w bazie. Teoretycznie łatwiej jest tym zarządzać, ale mam problem z szybkim klikaniem w przycisk wybuduj. Poniżej zamieściłem przykładowy, najprostszy kod, który mi nie działa. Zmienna $temp przechowuje ostatni dodany wpis do kolejki. Jeśli taki nie istnieje ustawia czas startu nowego na teraz, jeśli istnieje to czas startu nowego równa się czas zakończenia poprzedniego. Problem w tym, że przy szybkim kliknięciu warunek jest sprawdzany jeszcze przed dodaniem nowego wpisu z poprzedniego kliknięcia. Efekt jest taki, że kilka elementów z listy ma identyczny czas startu. Próbowałem to zabezpieczyć regenerując csrf_token przy każdym przesłaniu lub tworząc swoją zmienną sesyjną, lecz przy bardzo szybkim kliknięciu i tak dodadzą się 2-3 takie same elementy. Oczywiście nie chcę tego zabezpieczać tylko po stronie przeglądarki.
Już w kilku przypadkach miałem problem z tym, że przy szybkim odświeżaniu strony lub szybkim klikaniu w przycisk coś co powinno wydarzyć się raz, dzieje się kilka razy. Może Laravel ma jakis sposób na rozwiązanie tego problemu. Bardzo proszę o pomoc. //edit Sprawdziłem też w innym projekcie i problem jest ten sam. Jeszcze prościej:
Gdy dodaje komentarz z tym samym autorem powoli wszystko działa, gdy kliknę szybko parę razy to dodaje się wiele wpisów. Oczywiście takie coś można rozwiązać poprzez unique w bazie danych, ale mnie interesuje pierwszy przykład gdzie to jest niemożliwe. Ten post edytował Looozak 28.11.2015, 14:59:06 |
|
|
|
Looozak [inny][laravel 5.1] Dublowanie rekordów przy szybkim odświeżaniu strony 16.11.2015, 21:50:50
phpion Ja w tym przypadku zrezygnowałbym z zapisywania te... 16.11.2015, 22:11:15
Crozin Witamy w świecie współbieżności. ;-)
Przyczynę ju... 28.11.2015, 15:56:43
Pyton_000 @Crozin nie zakładałbym że kolega ma PSQL 28.11.2015, 16:30:31
Crozin Bez znaczenia czy korzysta z Postgresa, MySQL-a, k... 28.11.2015, 16:48:26
Looozak Ustawiłem poziom izolacji na SERIALIZABLE i zaczęł... 28.11.2015, 18:10:30 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 15:33 |