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

Slim, Twig, Illuminate database - jak wyświetlić wszystkie rekordy z bazy?

Object Storage Arubacloud
0 głosów
256 wizyt
pytanie zadane 10 marca 2018 w PHP przez michh123 Bywalec (2,790 p.)

Witam serdecznie!

Pare dni temu zacząłęm się uczyć microframework'a Slim. Jest to moja pierwsza przygoda z frameworkami. Od razu zainstalowałem polecane przez użytkowników paczki Twig i Illuminate/Database. Bardzo, bardzo powoli zaczynam ogarniać o co w ogóle chodzi.
Próbuję więc napisać sam pierwszą prymitywną "aplikację", która ma tylko wyświetlić na ekran rekordy z bazy:

link do apki na GitHubie

Problem w tym, że w obecnym stanie żadne informacje się nie wyświetlają. Nie ma też żadnego błędu.
Najważniejsze są tu pliki: app/Controllers/HomeController.php oraz resources/views/home.twig, ponieważ wydaje mi się, że to w nich coś jest nie tak. w pliku HomeController.php jest metoda user(), a w niej zapytanie do bazy. W obecnym stanie to zapytanie nie działa... Działa tylko jeśli zmienię to zapytanie na 

return User::find(1);

No ale wtedy wyświetlany jest tylko jeden (w tym wypadku pierwszy) rekord.

Czy wiecie może, drodzy Forumowicze, jak naprawić ten kod, aby na ekranie wyświetlone zostały wszystkie rekordy z bazy?

Bardzo proszę o pomoc i z góry dziękuję za odpowiedzi.
Pozdrawiam!

1 odpowiedź

+2 głosów
odpowiedź 10 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 10 marca 2018 przez michh123
 
Najlepsza
Gdy masz ORMa to unikaj pisania ręcznie zapytań (chyba że to faktycznie konieczne), po coś go masz. Użyj na modelu metody get() czy all(), aby pobrać wszystkie rekordy. Następnie w templatce musisz zrobić pętlę, która wyświetli każdy rekord - w chwili obecnej masz jak widzę wyświetlenie tylko jednego, dlatego też działa, gdy zrobisz User::find(1) co odszukuje po id i zwraca jeden rekord.
komentarz 10 marca 2018 przez michh123 Bywalec (2,790 p.)

I nagle wszystko stało się jasne! :) Dziękuję bardzo za pomoc!

BTW: Od razu jak zadziałało spróbowałem starego sposobu z selectem. I nie działa. Działa tylko z get() lub all(), tak jak Pan pisał. Czy to właśnie dlatego nie powinno się pisać ręcznych zapytań podczas korzystania z ORM?

Jeszcze raz dziękuję za pomoc!
Pozdrawiam!

1
komentarz 10 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)

Nie, po prostu jeśli użyjesz ORMa to nie musisz bawić się z gołym SQLem. Kod staje się czytelniejszy bo są tylko wywoływane odpowiednie metody, nie będzie też problemów przy zmianie silnika bazy danych (np. z MySQL na PostgreSQL) bo ORM odwali całą robotę. Pisanie czystego zapytania zostawiłbym jako ostateczność - tzn. gdy jest ono na tyle skomplikowane, że ORM albo sobie z nim nie poradzi albo będzie ono mocno nieoptymalne.

Nie zmienia to jednak faktu, że czyste zapytania i tak powinny działać. Może chodzi o to, że nie wywołałeś na tym na koniec metody get(), jak w przykładzie.

komentarz 10 marca 2018 przez michh123 Bywalec (2,790 p.)

Ok, rozumiem :)

Faktycznie! dodając metodę get() wszystko nagle działa, ale musiałem zmienić zapytanie. W poprzednich wersjach ten kod wyglądał tak:

return User::select('select * from users');

Po pańskim poprzednim komentarzu zmieniłem na:

return User::select('select * from users')->get();

I wywaliło błąd. W końcu po spojrzeniu na dokumentację zmieniłem na:

return User::select('*')->get();

I wszystko działa. Jednakże zostanę przy metodzie all() tak jak Pan radził :)

Dziękuję i pozdrawiam!

1
komentarz 10 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)

A tak, z dokumentacji wynika, że oczekuje podania samych kolumn, * po prostu wyciągnie wszystkie, czyli w zasadzie zadziała tak samo jak all().

komentarz 10 marca 2018 przez michh123 Bywalec (2,790 p.)
A czy Pan korzysta na co dzień z Illuminate Database w pracy lub osobiście? Jeśli tak to jak ocenia Pan to API? Czy warto z niego korzystać i czy zabezpieczenia przed atakami na bazę są aktualizowane?
1
komentarz 10 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Korzystamy w pracy z Eloquenta, czyli to co własnie nazywasz "Illuminate datbase". Oceniam raczej kiepsko, nie przepadam za nim jak i Laravelem (który ma właśnie domyślnie Eloquenta jako ORM). Jak widać wiele metod można wywoływać statycznie, wprost na modelu. Model jednocześnie przyjmuje dane, daje dostęp do buildera zapytań i pozwala na wyciąganie danych, to wydaje się niezbyt uporządkowane. Szczególnie przy relacjach wychodzą później jakieś dziwne kwiatki, gdzie relacje zapisuje się z nawiasami a dołączony nimi model bez (albo odwrotnie, zawsze mi się to myli). Właściwości nie są nigdzie definiowane, tzn. model może mieć dane pole z bazy ale wcale nie musi. IDE będzie też miało problem z sugerowaniem metod czy właściwości modeli, trzeba ratować się phpDocumentorem albo jakimiś helperami.

Osobiście znacznie bardziej wolę Doctrine, z niego korzystam prywatnie gdzie tylko mogę. Tam ładnie oddzielone są repozytoria do zapytań od samej klasy encji, która to przechowuje dane. Pola zawsze są zdefiniowane, robi się do nich gettery i settery.

Czy warto korzystać ogólnie z ORMa to zależy. Przy małych projektach raczej jest to wzięcie "armaty na muchę", czyli dużej biblioteki do wykonania kilku prostych zapytań. Przy większych myślę że jak najbardziej, jest to spore ułatwienie. Obydwa wymienione są ciągle rozwijane, więc raczej powinny być na bieżąco. Z resztą bezpośrednich ataków na linii ORM-baza raczej nie ma, jest ogólnie sql injection co zabezpieczyć bardzo łatwo.
komentarz 10 marca 2018 przez michh123 Bywalec (2,790 p.)
Za Laravela nawet nie mam zamiaru się brać, od razu jak ogarnę w miarę Slima mam zamiar uczyć się Symfony :) A Doctrine już od dzisiaj!

Dziękuję bardzo za pomoc i odpowiedzi, i czekam na kolejną część pańskiego kursu :)
Pozdrawiam!
1
komentarz 10 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Ok, powodzenia :) Dzięki, kurs gdzieś tam niestety ciągle w przygotowaniu, ale w końcu będą dalsze lekcje ;)

Podobne pytania

0 głosów
1 odpowiedź 296 wizyt
pytanie zadane 21 kwietnia 2018 w PHP przez Ace Nowicjusz (200 p.)
0 głosów
1 odpowiedź 191 wizyt
pytanie zadane 27 czerwca 2018 w PHP przez R[a]=d(ek); Mądrala (6,370 p.)
0 głosów
0 odpowiedzi 471 wizyt
pytanie zadane 29 sierpnia 2016 w PHP przez Chisorq Obywatel (1,680 p.)

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 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!

...