- Returnare rezultate pe bucati
- Metode: max, min, avg, sum
- Clauze Where
- Clauze Where avansate
- Metode pentru Order, Group, Limit, si Offset

Constructorul de Comenzi SQL din Laravel ofera o interfata fluenta pentru crearea si efectuarea de comenzi SQL la baza de date.
- Foloseste extensia PDO cu parametri de protectie SQL injection. Nu e nevoie de filtrarea datelor adaugate in instructiunile SQL.

Mai intai adaugati clasa Facades DB in controller:
use Illuminate\Support\Facades\DB;
Apoi, se foloseste metoda DB::table() pentru a incepe construirea interogarii SQL.

Returnare Rezultate

Puteti aplica si inlantui mai multe metode la DB::table('table_name') pentru a obtine rezultatele pe care le vreti.

Selectare toate randurile dintr-un tabel MySQL

Pentru a obtine toare randurile dintr-un tabel, aplicati metoda get().
- Exemplu: Simplu UserController cu o metoda index() care obtine toti utilizatorii si returneaza un view.
<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class UserController extends Controller {
  //Show a list of all of the users.
  //@return view
  public function index(){
    $users = DB::table('users')->get();
    return view('user.index', ['users' => $users]);
  }
}
Metoda get() returneaza un array cu obiecte pentru fiecare rand. Numele coloanelor sunt proprietati in obiect.
Puteti folosi o instructiune foreach() pentru a parcurge rezultatele.
foreach($users as $user){
  echo $user->name;
}
- Sau in fisierul view blade:
@foreach($users as $user)
  {{$user->name}}
@endforeach
- Pentru a obtine rezultate distincte, aplicati metoda distinct():
$users = DB::table('users')->distinct()->get();

Preluarea unui singur rand / coloana dintr-un tabel

Pentru a obtine un singur rand din tabelul bazei de date, puteti folosi metoda first(). Ea returneaza un singur obiect cu numele coloanelor ca proprietati:
$user = DB::table('users')->where('name', 'MarPlo')->first();

echo $user->name;
- Daca aveti nevoie de valoarea unei singure coloane dintr-un rand, aplicati metoda value('column_name'). Ea returneaza direct valoarea coloanei:
$email = DB::table('users')->where('id', '8')->value('email');

Preluarea unei liste cu valorile coloanelor

Pentru a obtine un rezultat cu valorile unei singure coloane din toate randurile, puteti folosi metoda pluck('column_name'):
$titles = DB::table('articles')->pluck('title');

foreach($titles as $title){
  echo '<br>'.$title;
}
- Puteti de asemenea sa specificati un index personalizat pentru coloana returnata:
$titles = DB::table('articles')->pluck('title', 'key');

foreach($titles as $key=>$title){
  echo '<br>'.$title;
}

Selectare coloane specificate

Pentru a selecta anumite coloanele dintr-un tabel, folositi metoda select() cu numele coloanelor ca argumente (puteti adauga si un Alias, cu "as"):
$users = DB::table('users')->select('name', 'emails as mail')->get();
Daca aveti deja o instanta a constructorului de comenzi SQL si doriti sa mai adaugati o coloana la select-ul existent, puteti folosi metoda addSelect():
$query = DB::table('users')->select('name', 'emails as mail');

$users = $query->addSelect('age')->get();

Expresii Raw SQL

Pentru a crea o expresie raw SQL, puteti folosi metoda DB::raw(). Aceste expresii vor fi incluse in interogarec SQL ca siruri (nu sunt filtrate automat anti SQL injection).
$users = DB::table('users')->select(DB::raw('count(*) as nru, status'))
->where('status', '<>', 1)->groupBy('status')->get();

Returnare rezultate pe bucati

Metoda chunk() este folositoare cand aveti nevoie sa lucrati cu mii de inregistrari ale bazei de date.
Aceasta metoda preia cate o parte din rezultate si plaseaza fiecare parte intr-o functie Callback pentru procesare.
- Aici este un exemplu cu selectarea intregului tabel de utilizatori, in bucati de cate 100 de inregistrari odata:
DB::table('users')->orderBy('id')->chunk(100, function($users){
  foreach($users as $user){
    //
  }
});
Pentru a opri preluarea altor bucati, aplicati return false; in functia Callback:
DB::table('users')->orderBy('id')->chunk(100, function($users){
  //...
  return false;
});

Metode: max, min, avg, sum

Constructorul de comenzi din Laravel furnizeaza o varietate de metode aditionale: max(), min(), avg(), si sum(). Puteti apela oricare dintre aceste metode dupa ce ati construit interogarea:
$nr_users = DB::table('users')->count();

$price = DB::table('orders')->min('price');
- Puteti combina aceste metode cu alte clauze:
$price = DB::table('orders')->where('finalized', 1)->avg('price');

Clauze Where

Pentru a adauga clauze WHERE la interogare, puteti folosi metoda where() .
Apelul de baza la where() necesita trei argumente:
- Numele coloanei.
- Un operator.
- Al treilea argument este valoare evaluata in raport cu coloana.
Daca vreti doar sa verificati egalitatea unei coloane cu valoarea data, puteti pune valoarea direct ca al doilea argument in metoda where().

Spre exemplu, aici aveti o interogare care selecteaza randurile in care valoarea coloanei "votes" este egala cu 10:
$users = DB::table('users')->where('votes', '=', 10)->get();
//or:
$users = DB::table('users')->where('votes', 10)->get();
- Puteti folosi o diferite tipuri de operatori in clauza WHERE:
$users = DB::table('users')->where('votes', '>=', 10)->get();

$users = DB::table('users')->where('votes', '<>', 12)->get();

$users = DB::table('users')->where('name', 'like', 'Ma%')->get();
Puteti adauga array-uri cu mai multe conditii in functia where() (acestea vor fi legate intre ele cu operatorul AND):
$users = DB::table('users')->where([
['status', '=', '1'], ['pages', '<>', '1']
])->get();

Conditii SQL cu OR

Puteti utiliza functia where() impreuna cu orWhere(), care este folosita pentru conditii cu 'OR' intre ele. Metoda orWhere() accepta aceleasi argumente ca si where():
$users = DB::table('users')->where('votes', '>', 8)
->orWhere('name', 'MarPlo')->get();

Clauze Where aditionale

Clauze Where avansate

Constructorul de comenzi Laravel poate gestiona grupari imbricate de clauze WHERE sau "where exists".

Grupare conditii WHERE

Aici aveti un exemplu de grupare imbricata cu mai multe conditii WHERE:
DB::table('users')->where('name', '=', 'MarPlo')->orWhere(function($query){
  $query->where('votes', '>', 10)->where('title', '<>', 'Admin');
})->get();
Functia adaugata ca argument in metoda orWhere() primeste o instanta de constructor de comenzi pe care o puteti folosi pentru a defini conditiile care sa fie cuprinse in grupuri de paranteze.
- Exemplul de mai sus produce urmatorul SQL:
select * from users where name='MarPlo' or (votes >10 and title <> 'Admin')

Clauze Where Exists

Metoda whereExists() permite sa scrieti clauze SQL where exists. Metoda whereExists() accepta o functie ca argument, care va primi o instanta de constructor se comenzi care va permite sa definiti interogarea ce trebuie pusa in clauza SQL "exists":
DB::table('users')->whereExists(function($query){
  $query->select(DB::raw(1))->from('orders')
   ->whereRaw('orders.user_id = users.id');
})->get();
Interogarea de mai sus produce urmatorul SQL:
select * from users where exists (
select 1 from orders where orders.user_id = users.id
)

Clauze Where JSON

Laravel suporta interogarea coloanelor de tip JSON in baze de date care furnizeaza suport pentru tipuri de coloane JSON: MySQL 5.7+ si Postgres.
Pentru a interoga elementele dintr-o coloana JSON, folositi operatorul "->" intre ele:
$users = DB::table('users')->where('preferences->meal', 'salad')->get();

Metode pentru Order, Group, Limit, si Offset



- Documentatie: Laravel - Database: Query Builder

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag se foloseste in <table> pentru a crea celula de tip "header"?
<thead> <th> <td>
<table><tr>
  <th>Title 1</th>
  <th>Title 2</th>
</tr></table>
Ce proprietate CSS seteaza distanta dintre randuri?
line-height word-spacing margin
.some_class {
  line-height: 150%;
}
Care functie deschide o noua fereastra.
alert() confirm() open()
document.getElementById("id_button").onclick = function(){
  window.open("http://coursesweb.net/");
}
Indicati functia PHP care returneaza un array cu numele fisierelor si directoarelor dintr-un director.
mkdir() scandir() readdir()
$ar_dir = scandir("dir_name");
var_export($ar_dir);
Care din urmatoarele forme a verbului "sleep" (a dormi) se foloseste pentru viitor?
sleeping slept will sleep
He will sleep there.
- El va dormi acolo.
Care din urmatoarele forme a verbului "dormir" (a dormi) se foloseste pentru viitor?
dormido dormirá durmiendo
Él dormirá allí.
- El va dormi acolo.
Lucru cu Baza de Date MySQL: Constructor de Comenzi SQL

Last accessed pages

  1. Curs si Tutoriale Ajax (66)
  2. Bubbles3 (3489)
  3. Prezentul simplu - Exercitii si teste incepatori (758)
  4. Butterfly Kyodai (2204)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (986)

Popular pages this month

  1. Bubbles3 (3489)
  2. Gramatica limbii engleze - Prezentare Generala (2797)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (2526)
  4. Butterfly Kyodai (2204)
  5. Zuma Deluxe (2083)