yii2 mysql查询_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();
總結
以上是生活随笔為你收集整理的yii2 mysql查询_Yii2 数据库查询汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结构体:求最高分和最低分
- 下一篇: 调用自定义函数search(int li