yii2.0 常用的操作

YII2.0

1.返回自增ID

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

2.执行SQL语句

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

3.执行SQL语句查询

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

4.加密

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

5.SQL插入

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

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 {
        // 验证成功
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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'];

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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'],
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

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'); 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

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();
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

11.获取指定字段

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

12.添加、修改

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

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();
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

14.多条件查询

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

15.limit offset用法

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

16.绑定触发事件

绑定:$this->on('SayGoodBye', ['app\models\Person','say_goodbye'],'再见了,我的朋友');
触发:$this->trigger('SayGoodBye');
<?php

namespace 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>';
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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;
 
 
  • 1
  • 2
  • 3

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;
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

19.跳转成功提示

控制器:Yii::$app->getSession()->setFlash('success', '开通账号失败');
视图: <?php if (Yii::$app->session->hasFlash('success')) { ?>

         <script>layer.alert("<?=Yii::$app->session->getFlash('success')?>")</script>

     <?php } ?>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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);
        },
    ],
]);
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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'];
});
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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'],
    ]
]
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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',
     ],
 ]
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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'],
];
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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();
        }
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

26.grid view打印sql

$commandQuery = clone $query;
        echo $commandQuery->createCommand()->getRawSql();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值