中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

yii2中查詢數據的方法

發布時間:2021-01-08 16:35:56 來源:億速云 閱讀:183 作者:小新 欄目:編程語言

這篇文章主要介紹yii2中查詢數據的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

數據查詢

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']);
    }
}

以上使用了[[yii\db\ActiveRecord::hasMany()]] 和 [[yii\db\ActiveRecord::hasOne()]]方法。以上兩例分別是關聯數據多對一關系和一對一關系的建模范例。如,一個客戶有很多訂單,一個訂單只歸屬一個客戶。兩個方法都有兩個參數并返回[[yii\db\ActiveQuery]]對象。

建立關聯關系后,獲取關聯數據和獲取組件屬性一樣簡單, 執行以下相應getter方法即可:

// 取得客戶的訂單
$customer = Customer::findOne(1);
$orders = $customer->orders; // $orders 是 Order 對象數組

以上代碼實際執行了以下兩條 SQL 語句:

SELECT * FROM customer WHERE id=1;
SELECT * FROM order WHERE customer_id=1;

有時候需要在關聯查詢中傳遞參數,如不需要返回客戶全部訂單, 只需要返回購買金額超過設定值的大訂單, 通過以下getter方法聲明一個關聯數據 bigOrders:

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

以上方法[[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]]是訪問INNER JOIN類型的[[yii\db\ActiveQuery::joinWith()

|joinWith()]]的快捷方式。

可以連接一個或多個關聯關系,可以自由使用查詢條件到關聯查詢, 也可以嵌套連接關聯查詢。如:

// 連接多重關系
// 找出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();

代碼背后, Yii 先執行一條 JOIN SQL 語句把滿足 JOIN SQL 語句查詢條件的主要模型查出, 然后為每個關系執行一條查詢語句, bing填充相應的關聯記錄。

[[yii\db\ActiveQuery::joinWith()|joinWith()]] 和 [[yii\db\ActiveQuery::with()|with()]] 的區別是 前者連接主模型類和關聯模型類的數據表來檢索主模型, 而后者只查詢和檢索主模型類。 檢索主模型

由于這個區別,你可以應用只針對一條 JOIN SQL 語句起效的查詢條件。 如,通過關聯模型的查詢條件過濾主模型,如前例, 可以使用關聯表的列來挑選主模型數據,

當使用 [[yii\db\ActiveQuery::joinWith()|joinWith()]] 方法時可以響應沒有歧義的列名。 In the above examples, we useitem.id and order.id to disambiguate the id column references 因為訂單表和項目表都包括 id 列。

當連接關聯關系時,關聯關系默認使用即時加載。你可以 通過傳參數 $eagerLoading 來決定在指定關聯查詢中是否使用即時加載。

默認 [[yii\db\ActiveQuery::joinWith()|joinWith()]] 使用左連接來連接關聯表。 你也可以傳 $joinType 參數來定制連接類型。 你也可以使用 [[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]]。

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

以上是“yii2中查詢數據的方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英德市| 大余县| 香港| 盈江县| 嘉义县| 阿尔山市| 荣成市| 绥芬河市| 岚皋县| 永川市| 新密市| 花莲市| 明星| 溧阳市| 大田县| 江山市| 祁阳县| 吉隆县| 双辽市| 社旗县| 龙口市| 江都市| 阿拉善左旗| 临桂县| 梓潼县| 财经| 泸西县| 浏阳市| 夏津县| 原阳县| 紫阳县| 中牟县| 那曲县| 文成县| 小金县| 沧州市| 于田县| 湖州市| 什邡市| 平原县| 新河县|