Yii2 數據庫查詢匯總


1、基礎查詢
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()->andFilterWhere(['like', 'name', '小伙兒']); 此方法是用 like 查詢 name 等於 小伙兒的 數據

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 條數據, 迭代查詢
2、直接查詢
createCommand(執行原生的SQL語句)  
$sql= "SELECT u.account,i.* FROM sys_user as u left join user_info as i on u.id=i.user_id";  
$rows=Yii::$app->db->createCommand($sql)->query();  
查詢返回多行:    
$command = Yii::$app->db->createCommand('SELECT * FROM post');  
$posts = $command->queryAll();
 
返回單行
$command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1');  
$post = $command->queryOne();
  
查詢多行單值:  
$command = Yii::$app->db->createCommand('SELECT title FROM post');  
$titles = $command->queryColumn();
  
查詢標量值/計算值:  
$command = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post');  
$postCount = $command->queryScalar();

2.1、綁定參數

$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
           ->bindValue(':id', $_GET['id'])
           ->bindValue(':status', 1)
           ->queryOne();

$params = [':id' => $_GET['id'], ':status' => 1];

$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
           ->bindValues($params)
           ->queryOne();
           
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status', $params)
           ->queryOne();

 2.2、執行非查詢語句

// INSERT (table name, column values)
Yii::$app->db->createCommand()->insert('user', [
    'name' => 'Sam',
    'age' => 30,
])->execute();

// UPDATE (table name, column values, condition)
Yii::$app->db->createCommand()->update('user', ['status' => 1], 'age > 30')->execute();

// DELETE (table name, condition)
Yii::$app->db->createCommand()->delete('user', 'status = 0')->execute();

// table name, column names, column values
Yii::$app->db->createCommand()->batchInsert('user', ['name', 'age'], [
    ['Tom', 30],
    ['Jane', 20],
    ['Linda', 25],
])->execute();

2.3、執行事務

$db = Yii::$app->db;
$transaction = $db->beginTransaction();

try {
    $db->createCommand($sql1)->execute();
    $db->createCommand($sql2)->execute();
    // ... executing other SQL statements ...
    
    $transaction->commit();
    
} catch(\Exception $e) {

    $transaction->rollBack();
    
    throw $e;
}

 

 3、關聯查詢

    /**
     *客戶表Model:CustomerModel 
     *訂單表Model:OrdersModel
     *國家表Model:CountrysModel
     *首先要建立表與表之間的關系 
     *在CustomerModel中添加與訂單的關系
     */     
    Class CustomerModel extends \yii\db\ActiveRecord
    {
        ...
        //客戶和訂單是一對多的關系所以用hasMany
        //此處OrdersModel在CustomerModel頂部別忘了加對應的命名空間
        //id對應的是OrdersModel的id字段,order_id對應CustomerModel的order_id字段
        public function getOrders()
        {
            return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);
        }
        
        //客戶和國家是一對一的關系所以用hasOne
        public function getCountry()
        {
            return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);
        }
        ....
    }
          
    // 查詢客戶與他們的訂單和國家
    CustomerModel::find()->with('orders', 'country')->all();
    // 查詢客戶與他們的訂單和訂單的發貨地址(注:orders 與 address都是關聯關系)
    CustomerModel::find()->with('orders.address')->all();
    // 查詢客戶與他們的國家和狀態為1的訂單
    CustomerModel::find()->with([
        'orders' => function ($query) {
            $query->andWhere('status = 1');
            },
            'country',
    ])->all();

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM