yii2的数据库操作

* all():将返回一个由行组成的数组,每一行是一个由名称和值构成的关联数组(译者注:省略键的数组称为索引数组)。

* one():返回结果集的第一行。

* column():返回结果集的第一列。

* scalar():返回结果集的第一行第一列的标量值。第一列第一个

* exists():返回一个表示该查询是否包结果集的值。是否有结果

* count():返回 COUNT 查询的结果。

* max(): 返回某一列的最大值

* min(): 返回某一列的最小值

* createCommand(): 测试query对象 sql params queryall

* indexBy: 以某些字段值为索引(下标)example:indexBy('user_id') function($row){return $row['id'].$row['name']}

  all()方法的优化

use yii\db\ActiveRecord;
use yii\db\Query;
$query = (new Query())->select('product_id,sku')->from('de_product');
$data = [];
foreach ($query->batch(200) as $batch) {//默认一次100条,可以自己设置参数
    $data[] = $batch;
    unset($batch);
}
foreach ($query->each() as $user) {//一次一条
    $data[] = $user;
}
原生查询

* queryAll() 返回多行

* queryOne() 返回第一行

* queryColumn......

* execute 返回执行sql所受到影响的行数

$params = [':image_id'=>20];
$id = 564;
$data = Yii::$app->db->createCommand('SELECT * FROM de_product where product_id=:id')->bindValues($params)->queryAll();
 
$data = Yii::$app->db->createCommand('SELECT * FROM de_product where product_id=:id',$params)->queryAll();
 
$data = Yii::$app->db->createCommand('SELECT * FROM de_product where product_id=:id')->bindParam(':id',$id)->queryAll();
 
$data = Yii::$app->db->createCommand("UPDATE jh_users SET username_ch='超级管理员11' WHERE user_id=1")->execute();
 
$data = Yii::$app->db->createCommand()->insert('jh_images',[
    'image_url'=>'sagasgdsa000'
])->execute();
 
$data = Yii::$app->db->createCommand()->batchInsert('jh_images',['image_url'],[
    ['三国杀1'],
    ['三国杀2']
])->execute();
 
Yii::$app->db->createCommand()->update('user', ['status' => 1], 'age > 30')->execute();
 查询结果转为数组

$data = Users::find()->orderBy('user_id desc')->all();//获取多条
//方法一
$arr = array();
foreach($data as $t)
{
    $arr[] = $t->attributes;
}
//方法二
$arr = array_map(function($record) {
    return $record->attributes;
 }, $data);
//方法三
$arr = ArrayHelper::toArray($data);
//方法四
$arr = Users::find()->asArray()->one();
$users = Users::findOne('111')->attributes;
执行事物

$db = Yii::$app->db;
$transaction = $db->beginTransaction();
try {
    $data = $db->createCommand()->batchInsert('jh_images',['image_url'],[
        ['三国杀7'],
        ['三国杀8']
    ])->execute();
    $data = $db->createCommand("UPDATE jh_users SET username_ch='超级管理员78' WHERE user_id=1")->execute();
    $transaction->commit();
} catch(\Exception $e) {
    $transaction->rollBack();
    throw $e;
} catch(\Throwable $e) {
    $transaction->rollBack();
    throw $e;
}
return $data;
 完整查询

public function getList($table,$field='*',$where=[],$order='',$limit='',$page=''){
    try {
        $lists = (new Query());
        $lists->select($field)->from($table);
        if($where)
            $lists->where($where);
        if($order)
            $lists->orderBy($order);
        if($limit)
            $lists->limit($limit);
        if($page)
            $lists->offset(($page-1)*$limit);
        $lists = $lists->all();
    } catch (\Error $e){
       return ['status'=>'Error','error_msg'=>$e->getMessage()];
    } catch (\Exception $e) {
       return ['status'=>'Exception','error_msg'=>$e->getMessage()];
    } catch (\Throwable $e) {
       return ['status'=>'Throwable','error_msg'=>$e->getMessage()];
    }
     return ['status'=>'successful','data'=>$lists];
}
模型操作

 

class Admin extends \yii\db\ActiveRecord
{
    public static function GetDb()
    {
        return Yii::$app->get('jhhrms');
    }
    
    /**
     * 入库一维数组
     * @param $data
     * @return mixed
     */
    public function add($data){
         $this->setAttributes($data);
         //注意:!!!当setAttributes($attributes,fase);时不用设置rules规则,否则则需要设置字段规则;
         $this->isNewRecord = true;
         $this->save();
         return $this->admin_id;
    }
 
    /**
     * 入库多维数组
     * @param $data
     * @return array
     */
    public function addAll($data){
        $ids = [];
        foreach ($data as $datum) {
            $this->isNewRecord = true;
            $this->setAttributes($datum);
            $this->save() && array_push($ids,$this->admin_id) && $this->admin_id = 0;
        }
        return $ids;
    }
    
    public function rules(){
        return [
          [['username','employee_number'],'required'],
          [['depart_id','position_id','role_id'],'integer'],
        ];
控制器调用模型

$data = [
    [   'username'        => '毛克利',
        'employee_number' => '23431'
    ],
    [   'username'        => '巴克拉',
        'employee_number' => '23432'
    ]
];
 
$model = new Admin();
var_dump($model->addAll($data));
 
//删除
$admin = Admin::find()->where(['admin_id'=>180])->one();
echo $admin->delete();
 
//删除多条
$result = Admin::deleteAll(['employee_number'=>'03252']);
var_dump($result);
 
//修改
$admin =  Admin::find()->where(['username'=>'毛克利'])->one();
$admin->username = '新毛克利';
echo $admin->save();
 
//修改工号为23431的员工的名字为毛克利kk
$res = $model->updateAll(['username'=>'毛克利kk'],['employee_number'=>'23431']);
$res = Yii::$app->db->createCommand()->update('jh_admin', ['username' => '毛克利kk'], 'employee_number = 23431')->execute();
var_dump($res);
 子查询和union查询

//子查询
$subQuery = (new Query())->select('COUNT(*)')->from('customer');
$query = (new Query())->select(['id', 'count' => $subQuery])->from('customer');
//SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
 
union查询
$query1 = (new Query())->select('user_id as id,username as name')->from('jh_users')->limit(3);
$query2 = (new Query())->select('per_id as id,per_name as name')->from('jh_performance')->limit(3);
$lists = $query1->union($query2)->all();
return $lists;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容