yii2常用方法

来源:互联网 发布:祁县哪个宽带网络好 编辑:程序博客网 时间:2024/05/20 17:09

YII2.0

1.返回自增ID

Yii::$app->db->getLastInsertID();

2.执行SQL语句

Yii::$app->db->createCommand($sql)->execute();

3.执行SQL语句查询

Yii::$app->db->createCommand($sql)->queryAll();

4.加密

Yii::$app->getSecurity()->generatePasswordHash($password);

5.SQL插入

Yii::$app->db->createCommand("insert into user(account,password,reg_time) VALUES ({$account},'$password',{$time})")->execute();

6.临时创建验证规则

public function actionSearch($name, $email){    $model = new DynamicModel(compact('name', 'email'));    $model->addRule(['name', 'email'], 'string', ['max' => 128])        ->addRule('email', 'email')        ->validate();    if ($model->hasErrors()) {        // 验证失败    } else {        // 验证成功    }}

7.获取模块名、控制器名、方法名

在视图中:     模块名  $this->context->module->id    控制器名 $this->context->id    方法名 $this->context->action->id在控制器中     模块名   Yii::$app->controller->module->id;     控制器名   Yii::$app->controller->id     方法名  Yii::$app->controller->action->id; 或    模块名 $this->module->id;    控制器名 $this->id;     方法名  $this->action->id; 获得自增ID $id = $post->attributes['id'];

8.自动验证规则

required : 必须值验证属性[['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredValidator 的别名, 确保了特性不为空.email : 邮箱验证['email', 'email']; #说明:CEmailValidator的别名,确保了特性的值是一个有效的电邮地址.match : 正则验证[['字段名'],match,'pattern'=>'正则表达式','message'=>'提示信息']; [['字段名'],match,'not'=>ture,'pattern'=>'正则表达式','message'=>'提示信息']; /*正则取反*/ #说明:CRegularExpressionValidator 的别名, 确保了特性匹配一个正则表达式.url : 网址['website', 'url', 'defaultScheme' => 'http']; #说明:CUrlValidator 的别名, 确保了特性是一个有效的路径.captcha : 验证码['verificationCode', 'captcha']; #说明:CCaptchaValidator 的别名,确保了特性的值等于 CAPTCHA 显示出来的验证码.safe : 安全['description', 'safe'];compare : 比较['age', 'compare', 'compareValue' => 30, 'operator' => '>=']; #说明:compareValue(比较常量值) - operator(比较操作符) #说明:CCompareValidator 的别名,确保了特性的值等于另一个特性或常量.default : 默认值['age', 'default', 'value' => null]; #说明:CDefaultValueValidator 的别名, 为特性指派了一个默认值.exist : 存在['username', 'exist']; #说明:CExistValidator 的别名,确保属性值存在于指定的数据表字段中.file : 文件['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024*1024]; #说明:CFileValidator 的别名, 确保了特性包含了一个上传文件的名称.filter : 滤镜[['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true]; #说明:CFilterValidator 的别名, 使用一个filter转换属性.in : 范围['level', 'in', 'range' => [1, 2, 3]]; #说明:CRangeValidator 的别名,确保了特性出现在一个预订的值列表里.unique : 唯一性['username', 'unique'] #说明:CUniqueValidator 的别名,确保了特性在数据表字段中是唯一的.integer : 整数['age', 'integer'];number : 数字['salary', 'number'];double : 双精度浮点型['salary', 'double'];date : 日期[['from', 'to'], 'date'];string : 字符串['username', 'string', 'length' => [4, 24]];boolean : 是否为一个布尔值['字段名', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true]; #说明:CBooleanValidator 的别名image :是否为有效的图片文件['primaryImage','image', 'extensions' => 'png, jpg,jpeg','minWidth' => 100,'maxWidth' => 1000,'minHeight' => 100,'maxHeight' => 1000,] 验证手机格式['mobile','match','pattern'=>'/^1[0-9]{10}$/','message'=>'{attribute}必须为1开头的11位纯数字'],['rpassword', 'compare', 'compareAttribute' =>'member_password', 'message'=>'两次密码不相等','on' => 'wxregister'],

9.创建场景

在模型内中定义场景 namespace app\models;use yii\db\ActiveRecord;class User extends ActiveRecord{    const SCENARIO_LOGIN = 'login';    const SCENARIO_REGISTER = 'register';    public function scenarios()    {        $scenarios = parent::scenarios();        $scenarios[self::SCENARIO_LOGIN] = ['username', 'password'];        $scenarios[self::SCENARIO_REGISTER] = ['username', 'email', 'password'];        return $scenarios;    }}在rules中设置场景字段public function rules(){return [[['username','password'], 'required', 'on' => 'login'],];}在控制器中使用场景 $usermodel->setScenario('login'); 

10.数据库简单操作

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 条数据, 迭代查询$order=OrderMdl::find()->where(['house_id'=>$house_id])->andWhere(['or',['status'=>[1,2]]])->asArray()->all();

11.获取指定字段

Category::find()->select(['id','name','uid'])->all();

12.添加、修改

Yii::$app->db->createCommand()->insert('user', $data)->execute();Yii::$app->db->createCommand()->update('user',['status'=>1])->execute();

13.关联查询

模型里面:public function getHouse()    {        return $this->hasMany(HouseMdl::className(), ['city' => 'city'])->select(['city','status']);    }控制器:$data = SpecialMdl::find()->With('house')->where(['special_id' => $special_id])->asArray()->select(['city','title_pic'])->all();

14.多条件查询

$query=UserMdl::find();        $data=$query->where(['money' => 0])->andWhere(['age' => 1])->andWhere(['<', 'uid', 60])->asArray()->all();

15.limit offset用法

$data=ProfitMdl::find()->where(array('uid'=>$uid))->orderBy('ctime desc')->offset($start)->limit($num)->asArray()->all();$start:第几页,0代表第一页   $num:每页几条

16.绑定触发事件

绑定:$this->on('SayGoodBye', ['app\models\Person','say_goodbye'],'再见了,我的朋友');触发:$this->trigger('SayGoodBye');<?phpnamespace app\models;use yii\base\Model;class Person extends Model{    public function say_hello($parm){        echo "你应该会看到:".$parm->data.'<br>';    }    public function say_goodbye($parm){        echo "你应该会看到:".$parm->data.'<br>';    }}

17.html助手

获取根目录:<?php echo Yii::$app->homeUrl.'img/about/logo.png' ?> /Server/web/img/about/logo.png获取当前除域名外的url:  Yii::$app->request->getUrl();  /Server/web/index.php/user/test/index获取当前域名  Yii::$app->request->hostInfo;

18.对象转数组

public static function object_array($array) {        if(is_object($array)) {            $array = (array)$array;        } if(is_array($array)) {            foreach($array as $key=>$value) {                $array[$key] = self::object_array($value);            }        }        return $array;    }

19.跳转成功提示

控制器:Yii::$app->getSession()->setFlash('success', '开通账号失败');视图: <?php if (Yii::$app->session->hasFlash('success')) { ?>         <script>layer.alert("<?=Yii::$app->session->getFlash('success')?>")</script>     <?php } ?>

20.对象转为数组

$posts = Post::find()->limit(10)->all();$data = ArrayHelper::toArray($posts, [    'app\models\Post' => [        'id',        'title',        // the key name in array result => property name        'createTime' => 'created_at',        // the key name in array result => anonymous function        'length' => function ($post) {            return strlen($post->content);        },    ],]);

21.数组检索列

通常你要从多行数据或者多个对象构成的数组中获取某列的值,一个普通的例子是获取id值列表。$data = [    ['id' => '123', 'data' => 'abc'],    ['id' => '345', 'data' => 'def'],];$ids = ArrayHelper::getColumn($array, 'id');结果将是 ['123', '345']。如果需要额外的转换或者取值的方法比较复杂, 第二参数可以指定一个匿名函数:$result = ArrayHelper::getColumn($array, function ($element) {    return $element['id'];});

22.重建数组索引

按一个指定的键名重新索引一个数组,可以用 index 方法。输入的数组应该是多维数组或者是一个对象数组。 键名(译者注:第二个参数)可以是子数组的键名、对象的属性名, 也可以是一个返回给定元素数组键值的匿名函数。1.$array = [    ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],    ['id' => '345', 'data' => 'def', 'device' => 'tablet'],    ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],];$result = ArrayHelper::index($array, 'id');输出:[    '123' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],    '345' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone']]2.$result = ArrayHelper::index($array, null, 'id');输出:[    '123' => [        ['id' => '123', 'data' => 'abc', 'device' => 'laptop']    ],    '345' => [        ['id' => '345', 'data' => 'def', 'device' => 'tablet'],        ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],    ]]

23.建立哈希表

为了从一个多维数组或者一个对象数组中建立一个映射表(键值对),你可以使用 map方法.$from$to 参数分别指定了欲构建的映射表的键名和属性名。 根据需要,你可以按照一个分组字段 $group 将映射表进行分组,例如$array = [    ['id' => '123', 'name' => 'aaa', 'class' => 'x'],    ['id' => '124', 'name' => 'bbb', 'class' => 'x'],    ['id' => '345', 'name' => 'ccc', 'class' => 'y'],);$result = ArrayHelper::map($array, 'id', 'name'); 结果是:  [     '123' => 'aaa',     '124' => 'bbb',     '345' => 'ccc', ]$result = ArrayHelper::map($array, 'id', 'name', 'class'); 结果是: [     'x' => [         '123' => 'aaa',         '124' => 'bbb',     ],     'y' => [         '345' => 'ccc',     ], ]

24.多维排序

$data = [    ['age' => 30, 'name' => 'Alexander'],    ['age' => 30, 'name' => 'Brian'],    ['age' => 19, 'name' => 'Barney'],];ArrayHelper::multisort($data, ['age', 'name'], [SORT_ASC, SORT_DESC]);排序之后我们在 $data 中得到的值如下所示:[    ['age' => 19, 'name' => 'Barney'],    ['age' => 30, 'name' => 'Brian'],    ['age' => 30, 'name' => 'Alexander'],];

25.简单事务处理和异常抛出、捕获

public function actionIndex()    {        $shiwu=Yii::$app->db->beginTransaction();        try{            Yii::$app->db->createCommand("insert into test(username,email) VALUES ('test1234','1234@qq.com')")->execute();            Yii::$app->db->createCommand("insert into test1(img,type) VALUES ('567.jpg',1)")->execute();            throw new BadRequestHttpException('抛出异常信息');            $shiwu->commit();        }catch(Exception $e){            var_dump($e->getMessage()); //捕获异常信息            $shiwu->rollBack();        }    }

26.grid view打印sql

$commandQuery = clone $query;        echo $commandQuery->createCommand()->getRawSql();