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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!