Curs Php-mysql

- 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 defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Lucru cu Baza de Date MySQL: Constructor de Comenzi SQL

Last accessed pages

  1. Pronume - Exercitii si teste engleza incepatori (15009)
  2. Creare si editare pagini HTML (82483)
  3. Verbe modale - Modal verbs - CAN, COULD, MAY, MIGHT, MUST (65562)
  4. Imparatul iubitor de cunoastere si ascetul datator de intelepciune (159)
  5. Verbe modale - SHALL, SHOULD, OUGHT TO, WILL, WOULD, USED TO, BE TO, DARE (32379)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1065)
  2. Curs HTML gratuit Tutoriale HTML5 (879)
  3. Coduri pt culori (621)
  4. Creare si editare pagini HTML (498)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (466)
Chat
Discuta sau lasa un mesaj pt. ceilalti utilizatori
Full screenInchide