Heim > Artikel > PHP-Framework > Es gibt mehrere Möglichkeiten, eine Verbindung zur Datenbank in yii herzustellen
PDO-Methode (geeignet für Multi-Table-Verbindungsabfragen). Anstatt Zeichenfolgen zu verwenden, können wir $condition zu einer Instanz von CDbCriteria machen, wodurch wir Bedingungen angeben können, die nicht auf WHERE beschränkt sind. $sql = "";//原生态sql语句
xx::model()->dbConnection->createCommand($sql)->execute(); 非select语句(update、insert、delete)
xx::model()->dbConnection->createCommand($sql)->queryRow(); 查询select一条记录
xx::model()->dbConnection->createCommand($sql)->queryAll(); 查询select多条记录
$sql = "select a.*, count(b.role_id)as num from {{user_role}} a left join {{user}} b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll();
$this->render("list", array('user_role_info'=>$user_role_info));
Eine Alternative zu CDbCriteria besteht darin, ein Array an die Find-Methode zu übergeben. Die Schlüssel und Werte des Arrays entsprechen jeweils den Attributnamen und Werten des Kriteriums
Das obige Beispiel kann wie folgt umgeschrieben werden:
$sql = "select a.*, count(b.role_id)as num from slgo_user_role a left join slgo_user b on a.id = b.role_id group by b.role_id order by a.id"; $user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); $this->render("list", array('user_role_info'=>$user_role_info));
Wenn es in einer Abfragebedingung um das Drücken geht: Wenn der angegebene Wert mit mehreren Spalten übereinstimmt, können wir findByAttributes() verwenden. Wir machen den Parameter $attributes zu einem Array von Werten, die durch Spaltennamen indiziert sind. In einigen Frameworks kann diese Aufgabe durch den Aufruf einer Methode wie findByNameAndTitle erreicht werden.
Obwohl dieser Ansatz verlockend aussieht, führt er häufig zu Verwirrung, Konflikten und Problemen wie der Berücksichtigung der Groß-/Kleinschreibung bei Spaltennamen.
Query Builder-Methode
$post=new Post; $post->title='sample post'; $post->content='post body content'; $post->save();
1 Wenn Sie ActiveRecord gut nutzen, sollten Sie meiner Erfahrung nach keine zweitklassige SQL-Abfragemethode generieren , übertreiben Sie es nicht. Bei Big-Data-Abfragen können Sie in Bezug auf den Speicherplatz toArray () in yii2 verwenden, um den Speicherverbrauch zu senken.
2. Der Vorteil von ActiveRecord gegenüber PDO liegt in seiner Bequemlichkeit.
Zum einen ist die Verwendung von ActiveRecord im Vergleich zum Schreiben von SQL-Anweisungen einfacher und, was noch wichtiger ist, weniger fehleranfällig. Das zweite ist, dass es viele Annehmlichkeiten bietet, die über SQL-Anweisungen hinausgehen, wie z. B. Parameterfilterung, Bindung usw. Bei der Webentwicklung wird man immer darauf stoßen, dass beim Schreiben einer SQL-Anweisung nach der anderen der Grad der Code-Wiederverwendung nicht hoch ist und man leicht vergisst, irgendwo zu filtern, was zu Sicherheitsrisiken führt.
3. Yii2 verfügt bereits über Query, das eine bessere Leistung als ActiveRecord bietet und als Ersatz verwendet werden kann. Natürlich sind Komfort und Effizienz zwei Seiten der Medaille, und seine Verwendung ist nicht so bequem wie die von ActiveRecord.
Aber meine Erfahrung im Projekt ist, dass Query nur etwas seltener verwendet wird als ActiveRecord. Ich persönlich denke, dass Query/ActiveQuery eine aufregende neue Funktion ist, die in Yii2 eingeführt wurde.
4. In den vorherigen Artikeln geht es um die Anwendungsszenarien von ActiveRecord. Wenn Sie PDO verwenden möchten, sollten Sie es für komplexere SQL-Operationen verwenden, z. B. für einen oder zwei Sätze, die nicht klar geschrieben werden können.
In diesem Fall ist die Verwendung von ActiveRecord zum Erstellen nicht weniger kompliziert als das direkte Schreiben von SQL, sodass Sie die Verwendung von PDO in Betracht ziehen können. Wenn die im Projekt verwendeten SQL-Anweisungen jedoch sehr komplex sind, werden sie meiner Meinung nach als DB-Ansichten oder gespeicherte Prozeduren geschrieben. Daher habe ich das Gefühl, dass PDO nicht häufig verwendet wird, sondern nur sehr wenig. 5. Wenn Sie eine höhere Effizienz anstreben, denke ich persönlich nicht, dass PDO zu oft verwendet werden sollte, was die spätere Wartung extrem erschwert. Stattdessen können Sie die Optimierung von SQL-Abfragen, die Optimierung von Indizes und Tabellenstrukturen, die Verwendung von Cache usw. in Betracht ziehen. Es ist erwähnenswert, dass die Verwendung des Caches die einfachste, direkteste und effektivste Methode ist.
6. Es besteht keine Notwendigkeit, Leistungsprobleme vorzeitig zu berücksichtigen
Das obige ist der detaillierte Inhalt vonEs gibt mehrere Möglichkeiten, eine Verbindung zur Datenbank in yii herzustellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!