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