Microsoft PowerPoint - 6. Query Builder.pptx

Величина: px
Почињати приказ од странице:

Download "Microsoft PowerPoint - 6. Query Builder.pptx"

Транскрипт

1 Visokaškola strukovnihstudija za informacione i komunikacione tehnologije Query builder Query builder je sastavni deo Laravel framework-a koji pruža pouzdan interfejs za rad sa bazom podataka, kreiranje i pokretanje upita. Query builder Omogućava obavljanje većine operacija koje se izvode nad bazom podataka. Query builder nije vezan za konkretan tip baze, već se kroz metode koje nudi, može raditi sa svim podržanim sistemima baza podataka. Školska 2017/18. Dr Nenad Kojić, dipl. inž. Luka Lukić, struk. inž. Danijela Nikitin, spec.stuk.inž Query builder Prednosti korišćenja query buildera u poređenju sa pisanjem klasičnih upita su mnogobrojne. Preporuka je da koristite ovaj način pisanja upita! Najveća prednosti jeste da štiti aplikaciju od SQL injection napada. Ovo je rešeno time što se parametri ne prosleđuju direktno upitu kroz konkatanacijom ( SELECT * FROM tabelawhere id =.$id), već se koristi PDO način prosleđivanja ( kroz odgovarajuću metodu). Pisanje upita

2 Izbor tabele Naučili smo da je u Laravel-u zarad sabazompodatakazadužena klasa DB. Ova klasa sadrži spisak metoda za kreiranje i pokretanje upita. Zaizbortabele, u okviruklasedb definisanje statički metod table(): ; 1. Dohvatanje podataka Možemo reće da je metod table()zamenazafromklauzuluu upitu. Izvršavanje upita Izvršavanje upita Za izvršavanje upitaidohvatanjesvihredovaiztabele, definisan je metod get(): Tip podatka koji vraća metoda get() je kolekcija, tj. Illuminate\Support\Collection, a svaki element ove kolekcije je StdClass objekat. SELECT * FROM tabela. Za složenije upite, pozivajuse dodatnemetodekoje se pišu između table() iget().

3 Primer select() Model <?php namespace App\Models; use Illuminate\Support\Facades\DB; class Korisnici{ } public function dohvatikorisnike() { $rezultat= DB::table('korisnici') return $rezultat; } View $korisnici kolekcija redova iz as $korisnik) <p>{{ $korisnik-> }} Kontroler } $korisnik jedanred izbaze <?php namespace App\Http\Controllers; use App\Models\Korisnici; class PrimerController { public function index(){ $korisnici = new Korisnici(); $korisniciupit = $korisnici- >dohvatikorisnike(); $podaci = array(); $podaci['korisnici'] = $korisniciupit; return view('primer', $podaci); } Kolona iz tabele korisnici Metod select() zamenjuje klauzulu SELECT u upitu: ->select('*') Prethodnalinijakodazamenjujeupit: SELECT * FROM tabela S obzirom na činjenicu da metoda get() zamenjuje SELECT *, metoda select() se ne mora pisati ukoliko se dohvataju sve kolone. select() limit() i offset() Mogu se navesti samo kolone koje želimo da dohvatimo iz tabele: DB::table('korisnici') ->select('kolona1','kolona2') Prethodnalinijakodazamenjujeupit: SELECT kolona1, kolona2 FROM tabela limit() i offset() najčešće se koriste kod paginacije ->offset(10) ->limit(5) ->get() SELECT * FROM tabelalimit 5, 10 -Od 5-og redauzetinarednih10.

4 where() where() Metod where() zamenjuje klauzulu WHERE u upitu: ->where('kolona1', 'vrednost') Prethodna linija koda zamenjuje upit: SELECT * FROM tabela WHERE kolona1 = vrednost Ovako napisana metoda traži sve redove gde je kolona jednaka prosleđenoj vrednosti. Možemo navesti i operator provere: Primer: ->where('kolona1', 'operator' 'vrednost') ->where('kolona1', '>=', 5) SELECT * FROM tabelawhere kolona1 > 5 where() orwhere() Ukoliko želimo više uslova da navedemo: [ ] oznakazaniz ->where([ ['kolona1', 'vrednost1'], ['kolona2','<', 100] ]) SELECT * FROM tabelawhere kolona1 = vrednost1 ANDkolona2 < 100 Sve kolone napisane u where() metodise u upitu spajaju AND operatorom. Ukoliko želimo uslove spojiti operatorom OR, koristi se poseban metod orwhere(). ->where('kolona1', '>', 100) ->orwhere('kolona2', vrednost2') SELECT * FROM tabelawhere kolona1 > 100 OR kolona2 = vrednost2

5 wherein() orderby() MetodawhereIn() se koristiukolikotražimo kolonu koja može imati neku od prosleđenih vrednosti: ->wherein('id', [ 1, 2, 3]) Prethodna linija koda zamenjuje upit: SELECT * FROM tabelawhere id IN (1, 2, 3) Sortiranje podataka iz baze se vrši metodom orderby(). ->orderby('kolona1', 'desc') SELECT * FROM tabelaorder BY kolona1 DESC join() join() Spajanjetabelaizbaze, tj. zamenazainner JOIN je metodjoin(). DB::table('tabela1') ->join('tabela2', 'tabela1.id', '=', 'tabela2.tabela1_id') SELECT * FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.tabela2.tabela1_id Ukolikoželimo pri spajanju tabela da prikažemo samo neke kolone, kod će biti ovakav: DB::table('tabela1') ->select('tabela1.*', 'tabela1.kolona1', 'tabela2.kolona5') ->join('tabela2', 'tabela1.id', '=', 'tabela2.tabela1_id') SELECT tabela1.*, tabela1.kolona, tabela2.kolona5 FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.tabela2.tabela1_id

6 leftjoin() ZamenazaLEFT JOIN je metodleftjoin(). DB::table('tabela1') ->leftjoin('tabela2', 'tabela1.id', '=', 'tabela2.tabela1_id') SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id = tabela2.tabela2.tabela1_id Primer upita Primer upita Ostale metode Primer: Dohvatiti inazivulogesvihkorisnikačija je uloga asistent. Sortirati podatke po imenu u opadajućem rasporedu. DB::table('korisnici') ->select('korisnici. ','uloge.naziv') ->join('uloge','korisnici.id_uloga', '=', 'uloge.id_uloga') ->where('uloge.naziv','asistent') ->orderby('ime','desc') Postoji još dosta metoda za dohvatanje podataka iz baze pomoću Query buildera. Spisak svih metoda možete pronaći na

7 insert() Metoda insert() služi za dodavanje redova u bazu. ->insert( ['kolona1' =>'vrednost1', 'kolona2' =>'vrednost2'] ); 2. INSERT [ ] oznakazaniz U formi asocijativnog niza se prosleđuje red za unos u bazu. insert() Dodavanje više redova u bazu: ->insert([ ['kolona1' =>'vrednost1', 'kolona2' =>'vrednost2'], ['kolona1' =>'vrednost3', 'kolona2' =>'vrednost4'] ]); 3. UPDATE

8 update() Ažuriranje redova iz tabele se vrši metodom update(). ->where('id', 1) ->update(['kolona1' => 1, 'kolona2' => 'Pera']); 4. DELETE delete() Visokaškola strukovnihstudija za informacione i komunikacione tehnologije Brisanje redova iz tabele se vrši metodom delete(). ->where('id', 1) ->delete(); Query builder Školska 2017/18. Dr Nenad Kojić, dipl. inž. Luka Lukić, struk. inž. Danijela Nikitin, spec.stuk.inž