#資料查詢
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 条数据, 迭代查询
多表查詢:##
/* 多表联查 */ $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()
#關聯查詢
使用AR 方法也可以查詢資料表的關聯資料(如,選出表A的資料可以拉出表B的關聯資料)。有了 AR, 傳回的關聯資料連線就像連接關聯主表的 AR 物件的屬性一樣。 建立關聯關係後,透過 $customer->orders 可以取得 一個 Order 物件的陣列,該陣列代表目前客戶物件的訂單集。 定義關聯關係使用一個可以返回[[yii\db\ActiveQuery]] 物件的getter 方法, [[yii\db\ActiveQuery]]物件有關聯上下文的相關信息,因此可以只查詢關聯數據。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']); } }
// 取得客户的订单 $customer = Customer::findOne(1); $orders = $customer->orders; // $orders 是 Order 对象数组
SELECT * FROM customer WHERE id=1; SELECT * FROM order WHERE customer_id=1;
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'); } }
聯合查詢
使用關聯式資料庫時,普遍要做的是連接多個資料表並明確運用各種JOIN 查詢。 JOIN SQL語句的查詢條件和參數,使用[[yii\db\ActiveQuery::joinWith()]] 可以重複使用已定義關係並呼叫而不是使用[[yii\db\ActiveQuery::join()]] 來實現目標。// 查找所有订单并以客户 ID 和订单 ID 排序,并贪婪加载 "customer" 表 $orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all(); // 查找包括书籍的所有订单,并以 `INNER JOIN` 的连接方式即时加载 "books" 表 $orders = Order::find()->innerJoinWith('books')->all();
// 连接多重关系 // 找出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();
Yii2 分頁
控制器CommentController 裡面的任何一個方法,在這裡我的方法是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, ]); }
#view裡面的程式碼
<?php use yii\widgets\LinkPager; ?> foreach($model as $key=>$val) { 这里就是遍历数据 } <?= LinkPager::widget(['pagination' => $pages]); ?>
in() 操作
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]])
not in() 操作
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();
Yii入門教學,歡迎大家學習!
以上是yii2怎麼查詢數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!