Yii 2.0 數據庫操作
第一種,使用的是use yii\db\Query;
use yii\db\Query;
$query = new Query();
query->select('*')->from('finance')->where("status = '有效' AND creator=".$uid);
$query->andWhere("is_delete='否'");
$model = $query->offset($pages->offset)->limit($pages->limit)->all();
這種出來的就直接是數組,比較容易處理,但是這種方法的話,需要指定from的數據庫,一般有分頁可以用這種,好像下面這樣使用
$query = new Query();
$query->select('*')->from('xxx');
if (empty($sort)) {
$orderBy = 'id DESC';
} else {
$orderBy = $sort.' '.$order;
}
$query->orderBy($orderBy);
//總數
$count = $query->count();
//顯示的數據
$list = $query->offset($offset)->limit($limit)->all();
而且可以用來做子查詢
$subQuery = (new Query())->select('COUNT(*)')->from('customer');
// SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('customer');
關聯表
$query->select('brand.*,company.chinese_name as company_chinese_name,company.foreign_name as company_foreign_name')->from('brand')->where("brand.status!='-1'")->join('LEFT JOIN','company','brand.company_id=company.id');
第二種,基礎yii\db\ActiveRecord都可以用,我們的model一般都是需要基礎它的
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 User();
$query = User->find()->select('*')->where("status='1'");
$query->andWhere(['id'=>'1']);
$query->all()
但是這樣出來的數據是對象,我們如果需要用數組,可以用AsArray()
$model = User::find()->>AsArray()->One();
而且我們新增數據和更新數據也是用這種
//新增
$model = new User()
//修改
$model = User::findOne(id);
//都可以用save
$model->save();
還有刪除
// delete customer-10
Customer::findOne(10)->delete();
// the above code is equivalent to:
Customer::deleteAll(['status' => 1], 'id = :id',[':id'=>10]);
最後還有一直算是手動寫sql的
//查詢
$customers = Yii::$app->db->createCommand('SELECT * FROM customer')->queryAll();
上面出來的是一個數組
//修改數據,修改admin_role表,id=10的數據,改statut=1
// update admin_role set status=1 where id = 10;
Yii::$app->db->createCommand()->update('admin_role',['status'=>1],'id=10')->execute();
//當然免不了delete
//delete from admin_role where id = 10
Yii::$app->db->createCommand()->delete('admin_role','id=10')->execute();
最後貼個官方文檔