yii2 基础知识总结
1:开启 Schema 缓存,会节省两次查询,生成缓存文件;可以通过 debug 查看#
'enableSchemaCache' => true,
'schemaCacheDuration' => 3600,
'schemaCache' => 'cache',
2:DAO 的 4 种查询方法(Database Access Objects);建立在 PHP PDO 之上的数据访问层 (DAO)#
- queryAll
- queryOne
- queryScalar
- queryColumn
3:DAO 的插入,更新,删除#
- 插入:Yii::$app->db->createCommand ()->insert (' 表名 ',[数据])->execute;(batchInsert 批量插入)
- 更新:Yii::$app->db->createCommand ()->(' 表名 ',[数据],[条件])->execute;
- 删除:Yii::$app->db->createCommand ()->(' 表名 ',[条件])->execute;
4:查询生成器(Query Builder);查询构建器建立在 DAO 上,前提是必须先实例化一个对象 $query = new query;#
- 查看构造后的语句,$query->createCommand ()->sql;$query ->createCommand ()->getRawSql ();
- from:from ('user u') || from (['u'=>'user']), 别名
- select:不能不填参数,但是可以为空数组;以下是 select 的小技巧
1> 按需查找字段 2> 别名:select(['ID'=>'id','名字'=>'username']) 3> 拼接字段:select(['卡号'=>"CONCAT(id,'-',username)" ]),可以用一些mysql的函数 4> 查找字段数量:select("count(*)") 5> 唯一性:select("username")->distinct
5:查询构造器的 where 方法#
三种参数方式
- 字符串形式:where ("id=2"), 不推荐这样;可以 where ("id=:id")->addParams ([":id"=>2]),where ("id=:id", [":id"=>2]) 绑定参数,预防 sql 注入,参数化
- 数组形式:where (['name'=>"lzc", 'id'=>[2,6]]), 里面的 [], 相当于 in;
- 复杂的数组形式:where (["<>","name","12"])
- orderBy 最好也用数组形式,清晰明了
6:查询构造器的 limit,offset,groupBy,Having#
- limit (2), 从 0 到 1
- offset (1), 从 1 开始,偏移一个,从第几个开始
- groupBy ([]), 分组;$query->select (['user_total'=>"count (*)"])->groupBy (['province'])
- having(['>','count(*)',1])
7:new ActiveDataProvider#
8:AR 的 rules; 可以查速查表 validate#
save之前会去自动验证;
language=>‘zh’,转换成中文;
if($model->save() == false){
$model->getErrors();
};
规则模版['字段',‘规则’,‘message’=>'']
massage提示语;
自定义rule:
1>:['username', function($attr,$params){
if($this->attr == 'abei'){
return true;
} else {
return->addError('username', '你不等于lv,所以不能通过')
}
}];
2>:通过使用匿名函数来自定义rule;
['字段',方法名称(只要方法名称就行)]
3>:或者自定义一个方法,来调用验证
['字段', 验证类名::classname()]
9AR 关联#
- hasOne
- hasMany
- get (魔术方法)+ 自定义名字:直接掉这个自定义名字即可
- return $this->hasMany (): 是个 query 对象,因为可以用 query 的方法,后面接
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: