Yii 2.0 操作數據的各種辦法 原

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

最後貼個官方文檔

activerecord queryinterface query

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章