Suche…


Verwenden des Yii2 Query Builder

Yii2 bietet effiziente Methoden zum Abrufen von Daten aus der Datenbank. Beachten Sie ein Beispiel für eine einfache Employer- Tabelle mit den Feldern emp_id, emp_name und emp_salary . Um die Mitarbeiternamen und deren Gehälter abzurufen, verwenden wir die Abfrage.

select emp_name,emp_salary from employee

Um die obige Abfrage in Yii2 zu generieren, gibt es viele Methoden. Eine der Methoden ist die Verwendung eines yii \ db \ Quer y- Objekts.

//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.

Wir können eine foreach-Schleife verwenden, um jedes Name-Wert-Paar im $ rows- Array zu durchlaufen.

foreach ($rows as $row) {
    echo "Employee Name: ".$row['emp_name'].",Employee Salary: ".$row['emp_salary']."<br>";
}

Dies wird ausgegeben

Name des Mitarbeiters: Kiran, Gehalt des Mitarbeiters: 25000

Name des Mitarbeiters: Midhun, Mitarbeitergehalt: 50000

Name des Mitarbeiters: Jishnu, Gehalt des Angestellten: 20000

Name des Mitarbeiters: Ajith, Gehalt des Mitarbeiters: 25000

Name des Mitarbeiters: Akshay, Gehalt des Angestellten: 750000

Mehr Beispiele

Angenommen, wir müssen den Namen der Mitarbeiter ermitteln, deren Gehalt 25000 beträgt. Wir können die Abfrage in SQL schreiben

select emp_name from employee where salary=25000

In Yii2 der Code zum Generieren der obigen Abfrage

$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(); 

Wenn wir Mitarbeiternamen suchen müssen, deren Gehalt mehr als 25000 beträgt, können wir den Code in Yii2 als schreiben

  $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();  

Weitere Zustandsüberprüfung mit where ()

Mehrere Bedingungen können mit der where () -Methode wie unten angegeben geschrieben werden.

// 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

Der obige Code holt einen Mitarbeiter mit dem Namen Kiran und einem Gehalt von 25000 ab . Wenn mehrere Mitarbeiter die obige Bedingung erfüllen, stellt der Anruf eins () sicher, dass nur das erste Ergebnis abgerufen wird. Um alle Ergebnisse abzurufen, sollten Sie all () verwenden .

Wenn Sie all () verwenden, ist das Ergebnis immer ein Array. Auch wenn es nur eins oder null gibt. Dieses Array enthält alle Ergebnisse als Arrays oder ist leer, wenn keine Datensätze übereinstimmen. Der Aufruf one () gibt das resultierende Array direkt zurück oder false, wenn die Abfrage nichts zurückgibt.

Der äquivalente Code in SQL ist unten angegeben.

select emp_name, emp_salary from employee where emp_name = 'Kiran' and emp_salary = 25000 limit 1;

Eine alternative Schreibweise für die obige Abfrage in Yii2 ist unten angegeben.

$rows = $query->select(['emp_name', 'emp_salary']) 
    ->from('employee')
    ->where(['emp_name' => 'Kiran'])
    ->andWhere(['emp_salary' => 25000])
    ->one();

Zusätzliche Bedingungen können mit undWhere angegeben werden. Dies ist hilfreich, wenn wir der Abfrage später eine zusätzliche Bedingungsprüfung hinzufügen müssen.

Eine weitere Möglichkeit, mehrere Bedingungen anzugeben, besteht darin, das Operator-Format der where () -Methode zu verwenden. Die obige Abfrage kann auch wie folgt geschrieben werden.

 $rows = $query->select(['emp_name','emp_salary']) 
    ->from('employee')
    ->where(['and', 'emp_name="kiran"', 'emp_salary=25000'])        
    ->one();

Hier geben wir den Operator ' and ' als erstes Element im Array an. In ähnlicher Weise können wir auch ' oder ', ' zwischen ', ' nicht zwischen ', ' in ', ' nicht in ', ' wie ', ' oder ähnlich ', ' nicht wie ', ' oder nicht wie ', ' existieren ' verwenden. , ' nicht vorhanden ', ' > ', ' <= ' usw. als Operatoren.

Beispiele für 'in' und 'like'

Angenommen, wir müssen die Mitarbeiter finden, deren Gehälter 20000, 25000 und 50000 betragen . In normalen SQL würden wir die Abfrage als schreiben

select * from employee where salary in (20000,25000,50000)

In Yii2 können wir dies wie folgt schreiben.

$rows = $query->from('employee')
        ->where(['emp_salary' => [20000,25000,50000]]) 
        ->all();

Eine andere Möglichkeit, dieselbe Bedingung anzugeben, ist

$rows = $query->from('employee')
    ->where(['in', 'emp_salary', [20000,25000,50000]]) // Making use of operator format of where() method
    ->all();

Ebenso kann ' nicht in ' anstelle von ' in ' angegeben werden, wenn alle Mitarbeiter ohne Gehälter 20000, 25000 und 50000 erhalten möchten.

Lassen Sie uns nun einige Beispiele für die Verwendung von ' like ' innerhalb von where () anzeigen. Nehmen wir an, wir müssen alle Mitarbeiter finden, die in ihrem Namen die Zeichenfolge " gopal " haben. Die Namen können venugopal, rajagopal, gopalakrishnan usw. sein. Die SQL-Abfrage ist unten angegeben.

select * from employee where emp_name like '%gopal%'

In Yii2 schreiben wir das als

 $rows = $query->from('employee')
        ->where(['like', 'emp_name', 'gopal']) // Making use of operator format of where() method
        ->all();

Wenn wir alle Mitarbeiter finden müssen, die in ihrem Namen die Zeichenfolge ' gopal ' und ' nair ' enthalten. Wir können als schreiben

   $rows = $query->from('employee')
        ->where(['like', 'emp_name', ['gopal','nair']]) // Making use of operator format of where() method
        ->all();

Dies würde als bewerten

Wählen Sie * aus dem Mitarbeiter aus, in dem der Emp_name wie '% gopal%' und '% nair%' enthalten ist.

In ähnlicher Weise können wir " nicht mögen " verwenden, um anzugeben, dass alle Mitarbeiter nicht die Zeichenfolge " gopal " und " nair " im Namen haben.

OrderBy () verwenden

Die orderBy () -Methode gibt das ORDER BY-Fragment einer SQL-Abfrage an. Betrachten Sie zum Beispiel unsere Employee-Tabelle mit den Feldern emp_id, emp_first_name, emp_last_name und emp_salary sql wie unten angegeben.

Select * from employee order by emp_salary

In yii2 können wir die Abfrage wie unten beschrieben erstellen

 //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();

Wenn wir die Mitarbeiter mit ihrem Vornamen in aufsteigender Reihenfolge und dann mit ihren Gehältern in absteigender Reihenfolge bestellen müssen, können wir sie wie folgt in plain sql schreiben.

Select * from employee order by emp_first_name ASC, emp_salary DESC

Das entsprechende sql kann mit yii2 wie folgt erstellt werden

//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();

Sie können ORDER BY auch mithilfe einer Zeichenfolge angeben, genau wie beim Schreiben von SQL-Rohanweisungen. Die obige Abfrage kann beispielsweise auch wie unten angegeben generiert werden.

//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();

Sie können addOrderBy () aufrufen, um dem ORDER BY-Fragment zusätzliche Spalten hinzuzufügen. Zum Beispiel

//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();


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow