• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Laravel - updateOrCreate nie działa

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 27 grudnia 2020 w PHP przez Bakkit Dyskutant (7,600 p.)

Dzień dobry! Mam taki kawałek kodu:

$serv = Server::updateOrCreate(
                    [ 'name' => $server, 'ip' => $status['ip'] ],
                     [
                         'motd' => $status['motd']['html'][0],
                         'playersOnline' => $status['players']['online'],
                         'slots' => $status['players']['max'],
                         'version' => $status['version'],
                         'isOnline' => $status['online'],
                         'icon' => $status['icon'],
                     ]
                );
            }

 

Zgodnie z dokumentacją powinien on znalezć wiersz w tabeli gdzie:

name = $server, ip = $ip, a następnie zaktualizować ten wiersz według tablicy podanej w drugim argumencie. W przypadku nie znalezienia takiego wierszu powinien on połączyć obie tablice i na jej podstawie stworzyć nowy wiersz w bazie. Dokumentacja

 

Natomiast Laravel wyrzuca błąd: ErrorException Undefined index: motd.

Gdy usunę linię 'motd' => $status['motd']['html'][0], wtedy wyrzuca: ErrorException Undefined index: players.

Wartości w zmiennych $status są prawidłowe - sprawdzałem je za pomocą funkcji dd().

 

Dodam jeszcze, że kod jest umieszczony w stworzonej przeze mnie komendzie artisana i poprzez komendę go wykonuje. 

 

Proszę o pomoc!

1 odpowiedź

0 głosów
odpowiedź 29 grudnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
No wygląda jakby ewidentnie wartości w zmiennej $status nie były jednak prawidłowe. Na pewno masz tam tablicę? Sprawdzasz przed samym użyciem, nic się nie zmienia gdzieś pomiędzy? Może pokaż screena z dd()?
komentarz 6 stycznia 2021 przez Bakkit Dyskutant (7,600 p.)
Nic się nie zmienia, dd() jest linijkę nad poleceniem updateOrCreate oraz zwraca normalnie wartości (stringi).
komentarz 6 stycznia 2021 przez Bakkit Dyskutant (7,600 p.)

@Arkadiusz Waluk, Bardzo dziwne jest to, że gdy zamienię powyższy kod na zwykłe echo $status['motd']['html'][0] to najpierw treść tej zmiennej zostaje wyświetlona w konsoli a potem pojawia się error Undefined array key "motd"

komentarz 6 stycznia 2021 przez Arkadiusz Waluk Ekspert (287,950 p.)
No to faktycznie, dość dziwne... Ciężko mi coś więcej na ten moment powiedzieć.
komentarz 6 stycznia 2021 przez Bakkit Dyskutant (7,600 p.)
No to podsyłam kolejną poszlakę :P

Zamieniłem metodę updateOrCreate() na zwykłe Server::where(xxx, xxx)->first() i jeśli zwróci obiekt to go updatuje funkcją update, jeśli nie to go tworzę poprzez $new = new Server(). I co ciekawe tutaj wszystko działa, zmienne zapisują dobre wartości do bazy, nie ma błędów. Z funkcją firstOrCreate jest podobny błąd co z updateOrCreate.
komentarz 6 stycznia 2021 przez Bakkit Dyskutant (7,600 p.)
Wygląda to tak jakby zmienna $status nie docierała do metod updateOrCreate() lub firstOrCreate ()

Podobne pytania

0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 16 października 2020 w PHP przez niezalogowany
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 15 września 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 241 wizyt
pytanie zadane 26 października 2020 w PHP przez niezalogowany

92,536 zapytań

141,376 odpowiedzi

319,449 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...