Datenabfrage
User::find()->all(); 此方法返回所有数据; User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子); User::find()->where(['name' => '小伙儿'])->one(); 此方法返回 ['name' => '小伙儿'] 的一条数据; User::find()->where(['name' => '小伙儿'])->all(); 此方法返回 ['name' => '小伙儿'] 的所有数据; User::find()->orderBy('id DESC')->all(); 此方法是排序查询; User::findBySql('SELECT * FROM user')->all(); 此方法是用 sql 语句查询 user 表里面的所有数据; User::findBySql('SELECT * FROM user')->one(); 此方法是用 sql 语句查询 user 表里面的一条数据; User::find()->andWhere(['sex' => '男', 'age' => '24'])->count('id'); 统计符合条件的总条数; User::find()->one(); 此方法返回一条数据; User::find()->all(); 此方法返回所有数据; User::find()->count(); 此方法返回记录的数量; User::find()->average(); 此方法返回指定列的平均值; User::find()->min(); 此方法返回指定列的最小值 ; User::find()->max(); 此方法返回指定列的最大值 ; User::find()->scalar(); 此方法返回值的第一行第一列的查询结果; User::find()->column(); 此方法返回查询结果中的第一列的值; User::find()->exists(); 此方法返回一个值指示是否包含查询结果的数据行; User::find()->batch(10); 每次取 10 条数据 User::find()->each(10); 每次取 10 条数据, 迭代查询
Mehrtabellenabfrage:
/* 多表联查 */ $model=new Customer(); $model->fiind()->join(‘LEFT JOIN‘,‘student‘,‘student.cid=customer.id‘) ->where(‘student.id‘=>\Yii::$app->user->id) ->andwhere(‘is_ok=1‘) ->one()
Verwandte Abfrage
Sie können die Datentabelle auch mit abfragen die AR-Methode Verwandte Daten (z. B. können durch Auswahl von Daten aus Tabelle A verwandte Daten aus Tabelle B abgerufen werden). Bei AR entspricht die zurückgegebene Verknüpfung verknüpfter Daten genau der Verknüpfung der Eigenschaften des AR-Objekts mit der zugehörigen Haupttabelle.
Nach dem Herstellen der Zuordnung können Sie über $customer->orders ein Array von Bestellobjekten erhalten, das den Bestellsatz des aktuellen Kundenobjekts darstellt.
Definieren Sie die Zuordnung mithilfe einer Getter-Methode, die ein [[yiidbActiveQuery]]-Objekt zurückgibt. Das [[yiidbActiveQuery]]-Objekt verfügt über Informationen zum zugehörigen Kontext, sodass Sie nur die zugehörigen Daten abfragen können.
class Customer extends \yii\db\ActiveRecord { public function getOrders() { // 客户和订单通过 Order.customer_id -> id 关联建立一对多关系 return $this->hasMany(Order::className(), ['customer_id' => 'id']); } } class Order extends \yii\db\ActiveRecord { // 订单和客户通过 Customer.id -> customer_id 关联建立一对一关系 public function getCustomer() { return $this->hasOne(Customer::className(), ['id' => 'customer_id']); } }
Das Obige verwendet die Methoden [[yiidbActiveRecord::hasMany()]] und [[yiidbActiveRecord::hasOne()]]. Die beiden oben genannten Beispiele sind Modellierungsbeispiele für Viele-zu-Eins-Beziehungen bzw. Eins-zu-Eins-Beziehungen in zugehörigen Daten. Ein Kunde hat beispielsweise viele Bestellungen und eine Bestellung gehört nur einem Kunden. Beide Methoden haben zwei Parameter und geben [[yiidbActiveQuery]]-Objekte zurück.
Nach dem Herstellen einer Zuordnung ist das Abrufen zugehöriger Daten so einfach wie das Abrufen von Komponentenattributen. Führen Sie einfach die folgenden entsprechenden Getter-Methoden aus:
// 取得客户的订单 $customer = Customer::findOne(1); $orders = $customer->orders; // $orders 是 Order 对象数组
Der obige Code führt tatsächlich die folgenden zwei SQL-Anweisungen aus:
SELECT * FROM customer WHERE id=1; SELECT * FROM order WHERE customer_id=1;
Manchmal ist es notwendig, Parameter in zugehörigen Abfragen zu übergeben. Wenn Sie nicht alle Bestellungen des Kunden zurücksenden müssen, müssen Sie nur große Bestellungen zurücksenden, deren Kaufbeträge den festgelegten Wert überschreiten Folgende Getter-Methode:
class Customer extends \yii\db\ActiveRecord { public function getBigOrders($threshold = 100) { return $this->hasMany(Order::className(), ['customer_id' => 'id']) ->where('subtotal > :threshold', [':threshold' => $threshold]) ->orderBy('id'); } }
Union Query
Bei Verwendung einer relationalen Datenbank werden im Allgemeinen mehrere Tabellen verknüpft und verschiedene explizit angewendet JOIN-Abfragen. Verwenden Sie für die Abfragebedingungen und Parameter der JOIN-SQL-Anweisung [[yiidbActiveQuery::joinWith()]], um die definierte Beziehung und den Aufruf wiederzuverwenden, anstatt [[yiidbActiveQuery::join()]] zu verwenden, um das Ziel zu erreichen.
// 查找所有订单并以客户 ID 和订单 ID 排序,并贪婪加载 "customer" 表 $orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all(); // 查找包括书籍的所有订单,并以 `INNER JOIN` 的连接方式即时加载 "books" 表 $orders = Order::find()->innerJoinWith('books')->all();
Die obige Methode [[yiidbActiveQuery::innerJoinWith()|innerJoinWith()]] dient dem Zugriff auf den INNER JOIN-Typ [[yiidbActiveQuery::joinWith()
|joinWith()] ]-Verknüpfung.
Sie können eine oder mehrere verwandte Beziehungen verbinden, Sie können Abfragebedingungen frei für verwandte Abfragen verwenden und Sie können auch verbundene verwandte Abfragen verschachteln. Beispiel:
// 连接多重关系 // 找出24小时内注册客户包含书籍的订单 $orders = Order::find()->innerJoinWith([ 'books', 'customer' => function ($query) { $query->where('customer.created_at > ' . (time() - 24 * 3600)); } ])->all(); // 连接嵌套关系:连接 books 表及其 author 列 $orders = Order::find()->joinWith('books.author')->all();
Hinter dem Code führt Yii zunächst eine JOIN-SQL-Anweisung aus, um die Hauptmodelle herauszufinden, die die Abfragebedingungen der JOIN-SQL-Anweisung erfüllen, führt dann eine Abfrageanweisung für jede Beziehung aus und führt Bing-Füllungen durch in den entsprechenden zugehörigen Datensätzen.
Der Unterschied zwischen [[yiidbActiveQuery::joinWith()|joinWith()]] und [[yiidbActiveQuery::with()|with()]] besteht darin, dass ersteres die Datentabellen des Hauptmodells verbindet -Klasse und die zugehörige Modellklasse, um das Hauptmodell abzurufen, während letztere nur die Hauptmodellklassen abfragt und abruft. Rufen Sie das Hauptmodell ab
Aufgrund dieses Unterschieds können Sie Abfragebedingungen anwenden, die nur für eine JOIN-SQL-Anweisung funktionieren. Filtern Sie beispielsweise das Hauptmodell anhand der Abfragebedingungen des zugehörigen Modells. Wie im vorherigen Beispiel können Sie die Spalten der zugehörigen Tabelle verwenden, um die Hauptmodelldaten auszuwählen.
Bei Verwendung von [[yiidbActiveQuery Die Methode ::joinWith()|joinWith()]] kann auf eindeutige Spaltennamen reagieren. In den obigen Beispielen verwenden wiritem.id und order.id, um die ID-Spaltenverweise eindeutig zu machen, da sowohl die Bestelltabelle als auch die Artikeltabelle die ID-Spalte enthalten.
Beim Herstellen einer Verbindung zu einer Assoziation verwendet die Assoziation standardmäßig das sofortige Laden. Sie können entscheiden, ob Eager Loading in der angegebenen zugehörigen Abfrage verwendet werden soll, indem Sie den Parameter $eagerLoading übergeben.
Standardmäßig verwendet [[yiidbActiveQuery::joinWith()|joinWith()]] den linken Join, um verwandte Tabellen zu verbinden. Sie können auch den Parameter $joinType übergeben, um den Join-Typ anzupassen. Sie können auch [[yiidbActiveQuery::innerJoinWith()|innerJoinWith()]] verwenden.
Yii2-Paging
Jede Methode im CommentController, hier ist meine Methode actionComment();
use yii\data\Pagination; use app\models\Comment; public function actionComment(){ $data = Comment::find()->andWhere(['id' => '10']); $pages = new Pagination(['totalCount' =>$data->count(), 'pageSize' => '2']); $model = $data->offset($pages->offset)->limit($pages->limit)->all(); return $this->render('comment',[ 'model' => $model, 'pages' => $pages, ]); }
Code im Inneren anzeigen
<?php use yii\widgets\LinkPager; ?> foreach($model as $key=>$val) { 这里就是遍历数据 } <?= LinkPager::widget(['pagination' => $pages]); ?>
in() Operation
SELECT * FROM `categ_price` WHERE `id` IN (9, 11)
$categ_price_id=[9>1,11=>3] $categPriceModel= \common\models\CategPrice::find()->where(['id' =>array_keys($categ_price_id)])->all(); #>where(['id' => [1, 2, 3]])
nicht in()-Operation
SELECT * FROM `shop` WHERE (status=1) AND (`id` NOT IN (88, 93))
$shopModel= Shop::find()->where('status=1')->andWhere(['not in','id',[88,98]])->all();
Die chinesische PHP-Website hat eine große Anzahl kostenloser Yii-Einführungs-Tutorials, jeder ist herzlich zum Lernen willkommen!
Das obige ist der detaillierte Inhalt vonSo fragen Sie Daten in yii2 ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!