![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 3 Dołączył: 8.06.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
wybaczcie, mam już wyrzuty sumienia - 3 post z kolei mojego autorstwa ale chyba tylko tutaj można spotkać ludzi którzy wiedzą o czym piszą (IMG:style_emoticons/default/Lkingsmiley.png)
Tym razem chodzi o model, kurcze jaką on pełni rolę ? W katalogu models tworze sobie klase które jest rozszerzeniem klasy Eloquent która to zawiera pewne podstawowe metody/zapytania. Tylko że w większości przykładów ludzie w tej klasie definiują jedynię nazwę tabeli a zapytanie piszą w kontrolerze na zasadzie zamiast
Załóżmy że mam 2 formularze, jeden służy do CRUD użytkowników a drugi CRUD userów do tej pory w CI robiłem sobie jeden model np. base_model gdzie miałem 4 funkcje każda z nich przyjmowała 2 parametry nazwę tabeli na której ma działać i opcjonalny parametr z danymi, dzięki temu w kontrolerze mogłem sobie wywołać po prostu metodę
Jak coś takiego powinno się robić w laravelu ? przeglądam już chyba 3 przykład gdzie autor po prostu zapytania SQL pisze w kontrolerze a sam plik w katalogu models tworzy jedynie po to by podać nazwę tabeli... |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Model jest po to aby móc dla konkretnej tabeli zdefiniować jakies określone metody np. findAllUniqueUsersBySurname....
Dzięki temu wiesz że dana metoda operuje na danej tabeli. a przykład z find(1) to jest standardowa metoda która wyszuka rekord o ID = 1 z danego modelu (tudzież z konkretnej tabeli opisanej przez Model) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 3 Dołączył: 8.06.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
^^ czyli rozumiem że w modelu nie używamy kodu sql a jedynie definiujemy zmienne które potem wykorzystujemy korzystając z wbudowanych zapytań klasy Eloquent w kontrolerze ?
Tylko że wtedy jeśli nie chcemy korzystać z wbudowanych zapytań a sami pisać swój kod SQL definiowanie modelu jest zupełnie niepotrzebne dobrze rozumiem ? Ewentualnie istnieje możliwość pisania swoich własnych zapytań w modelu ? tylko że tedy odnosimy się do klasy DB czy do rodzica ? Ten post edytował marcus753 5.07.2014, 15:55:52 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 3 Dołączył: 8.06.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
^^ o widzisz trochę mi rozjaśniłeś sytuację czyli:
wykorzystując klase DB::metoda_statyczna zapytania piszemy w kontrolerze i w ogóle nie korzystamy z modelu wykorzystując dziedziczenie z Eloquent zapytania piszemy w kontrolerze natomiast pola,zmienne oraz metody które je definiują przechowujemy w plikach w modelu czy w klasie DB:: mogę zdefiniować swoje własne zapytanie sql ? nie korzystając z metod insert select update itp. coś w rodzaju DB::SQL('moje zapytanie') <- w dokumentacji czegoś takiego nie widziałem ;( Rozumiem że w laravelu nie ma podobnego mechanizmu co w Codeigniterze ? tzn. jeden standardowy model (który sam sobie definiuje) i który może mi obsłużyć kilka tabel? Swoją drogą, tak się zastanawiam widząc taki kod:
który daje nam takie zapytanie sql:
czy to czasami nie jest sztuka dla sztuki ? przecież szybciej i dla mnie czytelniej jest napisać czysty kod SQL (który przecież trudny nie jest i stosunkowo przejrzysty) niż definiować wbudowane metody z parametrami... Ten post edytował marcus753 5.07.2014, 16:25:04 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Tak, jest prościej ale załóżmy, że musisz wypisać 10 użytkowników
Klient prosi o zmianę bazy danych z mysql do microsoft sql server. Zamieniasz w configu na mssql i nagle dupa. W mssql nie ma czegoś takiego jak LIMIT jest TOP. Aplikacja do poprawki. Gdy używasz wrapper'a czy ORM problemu zazwyczaj nie ma. Laravel daje ci wolną ręke.
Wszystko zależy od ciebie. Jeżeli nie chcesz ORM usuwasz extends i tak jak w Ci dodajesz metody dodaj,usun itd |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 3 Dołączył: 8.06.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
tylko że jak rozumiem takie zapytanie wykonuje nie w modelu a kontrolerze:
a gdybym chciał je wykonać w modelu? jest jakaś domyślna konstrukcja która mi to umożliwia ? Czy jak przypuszczam z plików modelu korzystamy tylko wtedy gdy używamy ORM ? Ten post edytował marcus753 5.07.2014, 17:01:06 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 3 Dołączył: 8.06.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
auć no to to jest wada i to dosyć duża, czyli jak rozumiem jeśli nie chcemy korzystać z orm-a to nie możemy definiować zapytań w modelu a pozostaje nam jedynie kontroler, z kolei decydując się na ORMa decydujemy się również na konstrukcję (jeden model odpowiada jednej tabeli w bazie) dodatkowo pewnie są zapytania których w ormie zrobić się nie da i wtedy musimy robić je standardowo w kontrolerze niszcząc tym samym podział MVC ehh
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli nie chcesz używać ORM to twój model nie dziedziczy po Eloqent. Normalnie w nim tworzysz metody i korzystasz w nich z query buildera.
Cytat dodatkowo pewnie są zapytania których w ormie zrobić się nie da i wtedy musimy robić je standardowo w kontrolerze niszcząc tym samym podział MVC Nic nie musisz robić w kontrolerze, a nawet nie powinieneś. Ten post edytował pitu 5.07.2014, 19:58:32 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 09:56 |