yii2
Lavorare con i database
Ricerca…
Utilizzando il generatore di query Yii2
Yii2 fornisce metodi efficienti per recuperare i dati dal database. Considerare un esempio di una semplice tabella dei dipendenti con campi emp_id, emp_name e emp_salary . Per recuperare i nomi dei dipendenti e i loro stipendi, utilizziamo la query.
select emp_name,emp_salary from employee
Per generare la query sopra in Yii2, ci sono molti metodi. Uno dei metodi è usare un oggetto yii \ db \ Quer y .
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->select(['emp_name','emp_salary']) //specify required columns in an array
->from('employee') //specify table name
->all(); //returns an array of rows with each row being an associative array of name-value pairs.
Possiamo fare uso di un ciclo foreach per eseguire il ciclo di ogni coppia nome-valore nell'array $ rows .
foreach ($rows as $row) {
echo "Employee Name: ".$row['emp_name'].",Employee Salary: ".$row['emp_salary']."<br>";
}
Questo uscirà
Nome del dipendente: Kiran, Stipendio dei dipendenti: 25000
Nome impiegato: Midhun, Stipendio dipendente: 50000
Nome del dipendente: Jishnu, Stipendio dei dipendenti: 20000
Nome del dipendente: Ajith, Stipendio dei dipendenti: 25000
Nome del dipendente: Akshay, Stipendio dei dipendenti: 750000
Altri esempi
Supponiamo di dover trovare il nome dei dipendenti il cui stipendio è uguale a 25000. Possiamo scrivere la query in sql come
select emp_name from employee where salary=25000
In Yii2, il codice per generare la query sopra
$query=new \yii\db\Query();
$rows=$query->select(['emp_name'])
->from('employee')
->where(['emp_salary'=>25000]) //specify the condition as an associative array where key is column name
->all();
Se abbiamo bisogno di trovare nomi di dipendenti il cui stipendio sia maggiore di 25000, possiamo scrivere il codice in Yii2 come
$rows=$query->select(['emp_name'])
->from('employee')
->where(['>','emp_salary', 25000])
//Here first element in the above array specify relational operator used, second element specify the table name and third the value itself.
->all();
Più controllo delle condizioni usando where ()
È possibile scrivere più condizioni utilizzando il metodo where () come indicato di seguito.
// Creates a new \yii\db\Query() object
$query = new \yii\db\Query();
$rows = $query->select(['emp_name','emp_salary'])
->from('employee')
->where(['emp_name' => 'Kiran', 'emp_salary' => 25000]) // Specify multiple conditions
->one(); // Returns the first row of the result
Il codice sopra richiamerà un impiegato che ha il nome kiran e lo stipendio 25000 . Se più dipendenti soddisfano la condizione di cui sopra, la chiamata uno () si assicura che venga recuperato solo il primo risultato. Per recuperare tutti i risultati dovresti usare all () .
Nota che se usi tutto () il risultato sarà sempre un array; Anche se ci sono solo uno o zero risultati. Questo array contiene tutti i risultati come array o è vuoto quando nessun record corrisponde. La chiamata one () restituirà l'array risultante direttamente o false se la query non restituisce nulla.
Di seguito è riportato il codice equivalente in sql.
select emp_name, emp_salary from employee where emp_name = 'Kiran' and emp_salary = 25000 limit 1;
Di seguito è riportato un modo alternativo di scrivere la query sopra riportata in Yii2.
$rows = $query->select(['emp_name', 'emp_salary'])
->from('employee')
->where(['emp_name' => 'Kiran'])
->andWhere(['emp_salary' => 25000])
->one();
È possibile specificare ulteriori set di condizioni utilizzando e dove . Questo sarà utile se avremo bisogno di aggiungere ulteriori controlli di condizione alla query più tardi.
Un altro modo per specificare più condizioni consiste nell'utilizzare il formato operatore del metodo where (). La query precedente può anche essere scritta come indicato di seguito.
$rows = $query->select(['emp_name','emp_salary'])
->from('employee')
->where(['and', 'emp_name="kiran"', 'emp_salary=25000'])
->one();
Qui specifichiamo l'operatore ' e ' come il primo elemento dell'array. Allo stesso modo possiamo anche usare " o ", " tra ", " non tra ", " in ", " non in ", " come ", " o come ", " non come ", " o non come ", " esiste " , ' non esiste ', ' > ', ' <= ' ecc come operatori.
Esempi di utilizzo di "in" e "mi piace"
Supponiamo di dover trovare gli impiegati con stipendi 20000, 25000 e 50000 . In sql normale scriveremo la query come
select * from employee where salary in (20000,25000,50000)
In Yii2 possiamo scrivere come indicato di seguito.
$rows = $query->from('employee')
->where(['emp_salary' => [20000,25000,50000]])
->all();
Un altro modo per specificare la stessa condizione è
$rows = $query->from('employee')
->where(['in', 'emp_salary', [20000,25000,50000]]) // Making use of operator format of where() method
->all();
Allo stesso modo ' non in ' può essere specificato invece di ' in ' se vogliamo che tutti i dipendenti non abbiano stipendi 20000, 25000 e 50000.
Ora vediamo alcuni esempi di utilizzo di "mi piace " all'interno della condizione where (). Supponiamo di dover trovare tutti i dipendenti che hanno la stringa " gopal " nel loro nome. I nomi possono essere venugopal, rajagopal, gopalakrishnan ecc. La query sql è riportata di seguito.
select * from employee where emp_name like '%gopal%'
In Yii2 scriveremo questo come
$rows = $query->from('employee')
->where(['like', 'emp_name', 'gopal']) // Making use of operator format of where() method
->all();
Se abbiamo bisogno di trovare tutti i dipendenti che hanno la stringa " gopal " e " nair " nel loro nome. Possiamo scrivere come
$rows = $query->from('employee')
->where(['like', 'emp_name', ['gopal','nair']]) // Making use of operator format of where() method
->all();
Questo valuterà come
seleziona * dal dipendente dove emp_name come '% gopal%' e '% nair%'
Allo stesso modo possiamo usare ' non come ' per indicare che tutti i dipendenti non hanno la stringa ' gopal ' e ' nair ' nei loro nomi.
Usare orderBy ()
Il metodo orderBy () specifica il frammento ORDER BY di una query SQL. Ad esempio, considera la nostra tabella dei dipendenti con campi emp_id, emp_first_name, emp_last_name e emp_salary. Supponiamo di dover ordinare il risultato aumentando l'ordine degli stipendi dei dipendenti. Possiamo farlo in sql come indicato di seguito.
Select * from employee order by emp_salary
In yii2, possiamo costruire la query come indicato di seguito
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows= $query->from('employee')->orderBy([
'emp_salary' => SORT_ASC //specify sort order ASC for ascending DESC for descending
])->all();
Se abbiamo bisogno di ordinare i dipendenti con il loro nome in ordine ascendente e poi i loro salari in ordine decrescente, possiamo scriverlo in plain sql come segue.
Select * from employee order by emp_first_name ASC, emp_salary DESC
L'equivalente sql può essere compilato usando yii2 come segue
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows= $query->from('employee')->orderBy([
'emp_first_name' => SORT_ASC
'emp_salary' => SORT_DESC
])->all();
È inoltre possibile specificare ORDER BY utilizzando una stringa, proprio come quando si scrivono istruzioni SQL non elaborate. Ad esempio, la query precedente può anche essere generata come indicato di seguito.
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC, emp_salary DESC')->all();
Puoi chiamare addOrderBy () per aggiungere ulteriori colonne al frammento ORDER BY. Per esempio
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC')
->addOrderBy('emp_salary DESC')->all();