Dieser Artikel stellt hauptsächlich relevante Informationen zur YII2-Datenbankabfragepraxis vor. Freunde, die sie benötigen, können sich auf
Eine vorläufige Untersuchung des YII2-Frameworks, Ergänzungen, Löschungen und Änderungen beziehen , verwandte Abfragen usw. Einfaches Üben grundlegender Datenbankoperationen.
Datenbankkonfiguration.
/config/db.php Konfigurieren Sie die Datenbank
Während der Übung gibt es eine Testbibliothek – „Testtabelle –“ zwei Datensätze sind wie folgt
mysql> aus dem Test ;
---- -------
| 🎜> |. 2 |
---- --------
18 Zeilen im Satz (0,00 Sek.)
SQL-Abfragemethode
$sql = "select * from test where 1";
$res = Test::findBySql($sql)->all() ;var_dump(count($res)); // res->2
// findbysql verhindert SQL-Injection
$id = '1 or 1=1';
$sql = "select * from test where id = " $id;
$res = Test : :findBySql($sql)->all();
var_dump(count($res)); // res->$sql = "select * from test where id = :id" ;
// Der Locator verhindert automatisch die SQL-Injektion
$res = Test::findBySql($sql,array(":id"=>$id))->all();
var_dump (count($res)); // res->1
activeRecord-Abfragemethode
Jedes Framework stellt zusätzlich zur ursprünglichen SQL-Methode eine entsprechende Kapselung bereit. Die Abfragemethode ist das gleiche wie yii2.
Modell erstellen
Die grundlegende Methode des Yii-Modells ist wie folgt. Der Code wird unten nicht im Detail beschrieben.
namespace appmodels;
use Yii;
use yiidbActiveRecord;class Test erweitert ActiveRecord
{
// Optional, entsprechende Tabelle: If Der Standardklassenname stimmt mit dem Tabellennamen überein. Diese Funktion wird nicht benötigt.
public static function tableName()
{
return 'test';
}
// Optional, Validator: hauptsächlich verwendet Überprüfen Sie jedes Feld
public function Rules(){
return [
['id', 'integer'],
['name', 'string', 'length' => 0, 100]],
];
}
}
Sie müssen das Modell einführen, wenn Sie es verwenden
verwenden Sie appmodelsTest;
// Operation hinzufügen
$test = new Test();$test->name = 'test';
// Gültigkeitsüberprüfung
$test->validate() ;
if($test->hasErrors()){
echo „Die Daten sind illegal“;
die;
}
$test->save();
Abfragevorgang
Abfragevorgang gehen Sie zuerst zum offiziellen Dokument
ActiveRecord-Dokument
wo Dokument
Es sollte betont werden : yii query bietet viele umfangreiche Bibliotheken, z. B. Batch-Abfrageverarbeitung im Code usw. Weitere Informationen finden Sie in der Dokumentation.
// select
// id = 1$res = Test::find()->where(['id' => 1])->all() ;
var_dump(count($res)); //1// id > 0
$res = Test::find()->where(['>','id ',0])->all();
var_dump(count($res)); //2
// id > =1 id <=2
$res = Test: :find()->where(['between','id',1,2])->all();
var_dump(count($res)); //2
// Namensfeld wie
$res = Test::find()->where(['like', 'name', 'cuihuan'])->all();
var_dump(count($res )); //2
// Abfrageverwendung obj->array
$res = Test::find()->where(['between','id',1,2]) - >asArray()->all();
var_dump($res[0]['id']); //2
// Batch-Abfrage, Batch-Abfrage für große Speicheroperationen
foreach (Test::find()->batch(1) as $test) {
var_dump(count($test));
}
Löschvorgang
// löschen
$res = Test::find()->where(['id'=>1])->all();
$res[0] ->delete();//Direkt löschen
var_dump(Test::deleteAll('id>:id', array(':id' => 2)));
Änderungsvorgänge
Zusätzlich zur Codemethode stellt yii2 direkt Aktualisierungsvorgänge bereit.
// Änderung des Aktivitätsdatensatzes
$res = Test::find()->where(['id'=>4])->one();$res ->name = "update";
$res->save();
Verwandte Abfrageoperation
Zwei Tabellen im zugehörigen Abfragebeispiel:
Eine Schülertabelle (Student): ID, Name;
Eine Punktetabelle (Punktzahl): ID, stu_id, Punktezahl
// Alle Punkte der entsprechenden Schüler
$ stu = Student::find()->where(['name'=>'xiaozhuai'])->one();var_dump($stu->id);
// Basic Get$scores_1 = $stu->hasMany('appmodelScore',['stu_id'=>$stu->id])->asArray()->all();
$ scores_2 = $stu->hasMany(Score::className(),['stu_id'=>'id'])->asArray()->all();
var_dump($scores_1) ;
var_dump($scores_2);
Bei der Ausführung verwandter Operationen im Controller ist der Code zu verwirrend, sodass der Aufruf im Modell gekapselt ist.
Kapseln Sie zunächst die relevanten Assoziationsaufruffunktionen im Student-Modell
namespace appmodels;
verwenden Sie Yii;
verwenden Sie yiidbActiveRecord;
class Student erweitert ActiveRecord
{
public static function tableName()
{
return 'student';
}
// Punkteinformationen abrufen
public function getScores()
{
$scores = $this->hasMany(Score::className(), ['stu_id' => 'id'])->asArray()->all();
return $scores; }
}
$scores = $stu->getScores() ;
var_dump($scores);
//Verwenden Sie die automatische Aufrufmethode von __get
$scores = $stu->scores;
var_dump($scores);