Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ORM czy jest sens
daniel1302
post
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Witam, zacząłem ostatnio inaczej patrzeć na temat ORM. jednak co artykuł w sieci to co innego pisze, jedni polecają inni odradzają. Zacząłem uczyć się frameworków i mam już szkic aplikacji którą jest blog. Ma to być aplikacja szkoleniowa i zastanawiam sie czy warto w niej skusić się na ORM. Czy jest wogóle marnować na niego sens? Używam Laravel i dodam, że obecnie mam kilka modeli napisanych z pomocą biblioteki DB z laravela.

Co wy możecie powiedzieć na temat ORM'a?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sazian
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


  1. SELECT X,count(*) c FROM tab1 WHERE id IN (SELECT id2 FROM tab2 WHERE tab2.kol=tab1.kol)
  2. GROUP BY X
  3. HAVING c>3

i jak to na orma przerobić ?
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(sazian @ 17.12.2014, 18:24:30 ) *
  1. SELECT X,count(*) c FROM tab1 WHERE id IN (SELECT id2 FROM tab2 WHERE tab2.kol=tab1.kol)
  2. GROUP BY X
  3. HAVING c>3

i jak to na orma przerobić ?


  1. DB::table('tab1')
  2. ->select(DB::raw('X, count(*) as c'))
  3. ->whereIn('id', function($query){
  4. $query->select('id2')->from('tab2')->whereRaw->('tab2.kol=tab1.kol');
  5. })
  6. ->groupBy('X')
  7. ->having('c', '>', 3)
  8. ->get();


Tyle że nie jest to ORM, a jest to query builder (fluent), w przypadku laravela. Jak już wspomniałem, tam nie ma zahardkodowanych zapytań, to jest tylko warstwa abstrakcyjna która ci to zapytanie skleja. A ostatecznie można wykonać raw sqla. Tutaj trochę więcej info: http://laravel.com/docs/4.2/queries nie mniej, do takich standardowych zapytań eloquent'em można modele wygenerować dość szybko i sprawnie. I tutaj właśnie o to chodzi.

EDIT: inaczej, bo tutaj w tym przypadku możecie nadal nie widzieć sensu, więc to inaczej wytłumaczę. Bo wy myślicie tak: skoro i tutaj działa, i tutaj, to po co bawić się w php, kiedy raw sql będzie szybszy. Owszem, będzie to trochę szybciej działało. Ale teraz kwestia tego jak podepniesz pod to cache? Musisz pewnie robić z palca coś pisać etc. W przypadku niektórych ORM'ów to jest kwestia uproszczona do minimum. Np powyższe zapytanie + cache:

  1. DB::table('tab1')
  2. ->select(DB::raw('X, count(*) as c'))
  3. ->whereIn('id', function($query){
  4. $query->select('id2')->from('tab2')->whereRaw->('tab2.kol=tab1.kol');
  5. })
  6. ->groupBy('X')
  7. ->having('c', '>', 3)
  8. ->remember(50);


I już mam cache. A co powiecie na paginacje? No problem:

  1. DB::table('tab1')
  2. ->select(DB::raw('X, count(*) as c'))
  3. ->whereIn('id', function($query){
  4. $query->select('id2')->from('tab2')->whereRaw->('tab2.kol=tab1.kol');
  5. })
  6. ->groupBy('X')
  7. ->having('c', '>', 3)
  8. ->paginate(15);


I już mam paginacje. A możliwości rozbudowy o mutatory czy akcesory o których wspomniał @Python_000, czyli jakieś dodatkowe modyfikowanie danych w locie to jest kwestia stworzenia metody, tutaj kilka przykładów: http://laravel.com/docs/4.2/eloquent#accessors-and-mutators

O ile zgodzę się że pisanie z palca całego forma w php jest dość często przerostem formy nad treścią, o tyle zapytania do bazy nie są jakoś szczególnie dodatkowo utrudnione, wręcz przeciwnie, ułatwienia są na każdym kroku (paginacja, cache etc). A możliwość wygenerowania prostych modeli poprzez konsole to już w ogóle spory plus. Nie wspominając o filtrowaniu przed sqlinjection (wszystko bindowane w pdo).

Ten post edytował by_ikar 17.12.2014, 21:17:09
Go to the top of the page
+Quote Post

Posty w temacie
- daniel1302   ORM czy jest sens   16.12.2014, 19:26:12
- - Pyton_000   DB? Użyje Eloquent bo jest bardzo wygodny i bardzo...   16.12.2014, 19:51:23
- - sazian   ja osobiście wolę czyste zapytania do db, ale to p...   16.12.2014, 20:26:23
- - daniel1302   Też bardzo lubię pisać zapytania i dodatkowo funkc...   16.12.2014, 20:38:52
- - ctom   Cytat(sazian @ 16.12.2014, 20:26:23 )...   16.12.2014, 21:52:32
- - sazian   no super że będę mógł podejrzeć zapytania, ale co ...   16.12.2014, 22:16:47
- - by_ikar   Ta eloquent też mi przypadł do gustu swoją prostot...   16.12.2014, 22:20:31
- - ctom   @sazian no właśnie chodziło mi, że możesz je pode...   16.12.2014, 22:33:11
|- - by_ikar   Cytat(ctom @ 16.12.2014, 22:33:11 ) p...   17.12.2014, 10:05:40
- - Pyton_000   by_ikar też się zastanawiałem o co może chodzić ...   17.12.2014, 11:54:57
- - sazian   [SQL] pobierz, plaintext SELECT X,count(*...   17.12.2014, 18:24:30
|- - aniolekx   Cytat(sazian @ 17.12.2014, 19:24:30 )...   17.12.2014, 19:22:16
|- - by_ikar   Cytat(sazian @ 17.12.2014, 18:24:30 )...   17.12.2014, 20:32:13
- - Pyton_000   [PHP] pobierz, plaintext Tabela1::with('id', T...   17.12.2014, 19:57:24
- - Daimos   Cytat(by_ikar @ 17.12.2014, 20:32:13 ...   20.12.2014, 13:26:32
- - Dejmien_85   Cytat(daniel1302 @ 16.12.2014, 19:26...   20.12.2014, 21:58:52
|- - irmidjusz   Często przytaczany jest taki argument, że ORM daje...   21.12.2014, 12:59:04
|- - Dejmien_85   Cytat(irmidjusz @ 21.12.2014, 12:59:0...   21.12.2014, 18:18:12
- - !*!   [SQL] pobierz, plaintext SELECT X,count(*...   21.12.2014, 10:57:33
- - m44   CytatEncje jako modele - to jest nieporozumienie. ...   21.12.2014, 14:25:03


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 22:52