yii2
Praca z bazami danych
Szukaj…
Korzystanie z konstruktora zapytań Yii2
Yii2 zapewnia wydajne sposoby pobierania danych z bazy danych. Weźmy pod uwagę przykład prostej tabeli pracowniczej zawierającej pola emp_id, emp_name i emp_salary . W celu odzyskania nazwisk pracowników i ich wynagrodzeń korzystamy z zapytania.
select emp_name,emp_salary from employee
Aby wygenerować powyższe zapytanie w Yii2, istnieje wiele metod. Jedną z metod jest użycie obiektu 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.
Możemy skorzystać z pętli foreach, aby przejrzeć każdą parę nazwa-wartość w tablicy $ Row.
foreach ($rows as $row) {
echo "Employee Name: ".$row['emp_name'].",Employee Salary: ".$row['emp_salary']."<br>";
}
To wyjdzie
Nazwa pracownika: Kiran, Wynagrodzenie pracownika: 25000
Nazwa pracownika: Midhun, Wynagrodzenie pracownika: 50000
Nazwa pracownika: Jishnu, Wynagrodzenie pracownika: 20000
Nazwisko pracownika: Ajith, wynagrodzenie pracownika: 25000
Nazwa pracownika: Akshay, Wynagrodzenie pracownika: 750000
Więcej przykładów
Załóżmy, że musimy znaleźć nazwiska pracowników, których wynagrodzenie wynosi 25 000. Możemy napisać zapytanie w sql as
select emp_name from employee where salary=25000
W Yii2 kod generujący powyższe zapytanie
$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();
Jeśli musimy znaleźć nazwiska pracowników, których wynagrodzenie jest większe niż 25000, możemy napisać kod w Yii2 as
$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();
Więcej sprawdzania warunków za pomocą where ()
Wiele warunków można zapisać za pomocą metody where () , jak podano poniżej.
// 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
Powyższy kod pobierze pracownika o nazwisku kiran i pensji 25000 . Jeśli wielu pracowników spełnia powyższy warunek, funkcja call one () upewnia się, że pobierany jest tylko pierwszy wynik. Aby pobrać wszystkie wyniki, użyj all () .
Zauważ, że jeśli użyjesz all (), wynikiem będzie zawsze tablica; Nawet jeśli występuje tylko jeden lub zero wyników. Ta tablica zawiera wszystkie wyniki jako tablice lub jest pusta, gdy żaden rekord nie pasuje. Wywołanie one () zwróci wynikową tablicę bezpośrednio lub false, jeśli zapytanie niczego nie zwróci.
Odpowiednik kodu w sql podano poniżej.
select emp_name, emp_salary from employee where emp_name = 'Kiran' and emp_salary = 25000 limit 1;
Alternatywny sposób napisania powyższego zapytania w Yii2 podano poniżej.
$rows = $query->select(['emp_name', 'emp_salary'])
->from('employee')
->where(['emp_name' => 'Kiran'])
->andWhere(['emp_salary' => 25000])
->one();
Dodatkowy zestaw warunków można określić za pomocą andWhere . Będzie to przydatne, jeśli później będziemy musieli dodać do zapytania dodatkowe sprawdzanie warunków.
Jeszcze innym sposobem na określenie wielu warunków jest użycie formatu operatora metody where (). Powyższe zapytanie można również napisać, jak podano poniżej.
$rows = $query->select(['emp_name','emp_salary'])
->from('employee')
->where(['and', 'emp_name="kiran"', 'emp_salary=25000'])
->one();
W tym miejscu określamy operator „ i ” jako pierwszy element w tablicy. Podobnie możemy również użyć „ lub ”, „ pomiędzy ”, „ nie pomiędzy ”, „ w ”, „ nie w ”, „ lubię ”, lub lubię ”,„ nie lubię ”,„ lub nie lubię ”,„ istnieje ” , „ nie istnieje ”, „ > ”, „ <= ” itd. jako operatory.
Przykłady użycia „w” i „jak”
Załóżmy, że musimy znaleźć pracowników o wynagrodzeniach 20000, 25000 i 50000 . W normalnym SQL napisalibyśmy zapytanie jako
select * from employee where salary in (20000,25000,50000)
W Yii2 możemy to napisać jak podano poniżej.
$rows = $query->from('employee')
->where(['emp_salary' => [20000,25000,50000]])
->all();
Innym sposobem określenia tego samego warunku jest
$rows = $query->from('employee')
->where(['in', 'emp_salary', [20000,25000,50000]]) // Making use of operator format of where() method
->all();
Podobnie można określić „ nie w ” zamiast „ w ”, jeśli chcemy, aby wszyscy pracownicy nie mieli wynagrodzeń w wysokości 20000, 25000 i 50000.
Zobaczmy teraz kilka przykładów użycia „ like ” w warunku where (). Załóżmy, że musimy znaleźć wszystkich pracowników posiadających w nazwie ciąg „ gopal ”. Nazwy mogą być venugopal, rajagopal, gopalakrishnan itp. Zapytanie SQL jest podane poniżej.
select * from employee where emp_name like '%gopal%'
W Yii2 napiszemy to jako
$rows = $query->from('employee')
->where(['like', 'emp_name', 'gopal']) // Making use of operator format of where() method
->all();
Jeśli musimy znaleźć wszystkich pracowników mających w swoim imieniu ciąg „ gopal ” i „ nair ”. Możemy napisać jako
$rows = $query->from('employee')
->where(['like', 'emp_name', ['gopal','nair']]) // Making use of operator format of where() method
->all();
Oznaczałoby to jako
wybierz * od pracownika gdzie emp_name, np. „% gopal%” i „% nair%”
Podobnie możemy użyć „ nie lubię ”, aby wskazać wszystkich pracowników, którzy nie mają w swoich nazwach ciągów „ gopal ” i „ nair ”.
Korzystanie z orderBy ()
Metoda orderBy () określa fragment ZAMÓWIENIA według zapytania SQL. Na przykład rozważmy, czy nasza tabela pracowników ma pola emp_id, emp_first_name, emp_last_name i emp_salary. Załóżmy, że musimy uporządkować wynik poprzez zwiększenie kolejności wynagrodzeń pracowników. sql jak podano poniżej.
Select * from employee order by emp_salary
W yii2 możemy zbudować zapytanie jak podano poniżej
//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();
Jeśli musimy zamówić pracowników z imieniem w kolejności rosnącej, a następnie ich pensje w kolejności malejącej, możemy napisać to zwykłym sql w następujący sposób.
Select * from employee order by emp_first_name ASC, emp_salary DESC
Odpowiednik sql można zbudować przy użyciu yii2 w następujący sposób
//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();
Możesz również określić ORDER BY za pomocą łańcucha, tak jak robisz to podczas pisania surowych instrukcji SQL. Na przykład powyższe zapytanie można również wygenerować, jak podano poniżej.
//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();
Możesz wywołać metodę addOrderBy (), aby dodać dodatkowe kolumny do fragmentu ORDER BY. Na przykład
//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();