yii2 基礎知識總結

ruiyuan發表於2019-07-31
'enableSchemaCache' => true,
'schemaCacheDuration' => 3600,
'schemaCache' => 'cache',
  • queryAll
  • queryOne
  • queryScalar
  • queryColumn
  • 插入:Yii::$app->db->createCommand()->insert('表名',[資料])->execute;(batchInsert批量插入)
  • 更新:Yii::$app->db->createCommand()->('表名',[資料],[條件])->execute;
  • 刪除:Yii::$app->db->createCommand()->('表名',[條件])->execute;
  • 檢視構造後的語句,$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

三種引數方式

  • 字串形式: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最好也用陣列形式,清晰明瞭
  • limit(2),從0到1
  • offset(1),從1開始,偏移一個,從第幾個開始
  • groupBy([]),分組;$query->select(['user_total'=>"count(*)"])->groupBy(['province'])
  • having(['>','count(*)',1])
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()]
  • hasOne
  • hasMany
  • get(魔術方法)+自定義名字:直接掉這個自定義名字即可
  • return $this->hasMany():是個query物件,因為可以用query的方法,後面接

相關文章