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');
<?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>';
}
}
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','[email protected]')")->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();