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();
阅读全文
0 0
- yii2常用方法
- Yii2表单常用方法
- Yii2 常用rules规则
- YII2常用表单元素
- Yii2-常用应用配置
- Yii2 rules常用规则
- yii2常用小技巧
- YII2.0 常用路径
- yii2常用ActiveForm表单
- yii2 常用组件 -- 列表
- yii2 常用组件 -- 表单
- yii2 常用组件 -- 模态框
- YII2自定义公共方法
- Yii2 rules 验证方法
- yii2表单验证方法
- yii2加密方法
- yii2 AR常用数据操作
- YII2.0 常用查询语句
- 江windows盘挂载到ubuntu下
- hdoj 2000
- 如何生成KeyStore
- 单KEY业务,数据库水平切分架构实践 | 架构师之路
- okHttp工具类,实现get和post
- yii2常用方法
- Js控制iphone端的input/textarea元素失去焦点时隐藏键盘
- hdoj 2001
- 面试题目
- SqlServer循环查询
- 关于requireJs基础的总结
- mysql语句执行顺序
- 排序算法
- Java并发编程:volatile关键字解析