yii2 常見model操作方法

對象操作

查詢

  1. //1.簡單查詢  
  2. $admin=Admin::model()->findAll($condition,$params);  
  3. $admin=Admin::model()->findAll("username=:name",array(":name"=>$username));  
  4.    
  5. $infoArr= NewsList::model()->findAll("status = '1' ORDER BY id DESC limit 10 ");  
  6.    
  7. //2. findAllByPk(該方法是根據主鍵查詢一個集合,可以使用多個主鍵)  
  8. $admin=Admin::model()->findAllByPk($postIDs,$condition,$params);  
  9. $admin=Admin::model()->findAllByPk($id,"name like :name and age=:age",array(':name'=>$name,'age'=>$age));  
  10. $admin=Admin::model()->findAllByPk(array(1,2));  
  11.    
  12. //3.findAllByAttributes (該方法是根據條件查詢一個集合,可以是多個條件,把條件放到數組裏面)  
  13. $admin=Admin::model()->findAllByAttributes($attributes,$condition,$params);  
  14. $admin=Admin::model()->findAllByAttributes(array('username'=>'admin'));  
  15.    
  16. //4.findAllBySql (該方法是根據SQL語句查詢一個數組)  
  17. $admin=Admin::model()->findAllBySql($sql,$params);  
  18. $admin=Admin::model()->findAllBySql("select * from admin where username like :name",array(':name'=>'%ad%'));  
  19. User::find()->all();    此方法返回所有數據;  
  20. User::findOne($id);   此方法返回 主鍵 id=1  的一條數據(舉個例子);   
  21. User::find()->where(['name' => '小夥兒'])->one();   此方法返回 ['name' => '小夥兒'] 的一條數據;  
  22. User::find()->where(['name' => '小夥兒'])->all();   此方法返回 ['name' => '小夥兒'] 的所有數據;  
  23. User::find()->orderBy('id DESC')->all();   此方法是排序查詢;  
  24. User::findBySql('SELECT * FROM user')->all();  此方法是用 sql  語句查詢 user 表裏面的所有數據;  
  25. User::findBySql('SELECT * FROM user')->one();  此方法是用 sql  語句查詢 user 表裏面的一條數據;  
  26. User::find()->andWhere(['sex' => '男''age' => '24'])->count('id');   統計符合條件的總條數;  
  27. User::find()->one();    此方法返回一條數據;  
  28. User::find()->all();    此方法返回所有數據;  
  29. User::find()->count();    此方法返回記錄的數量;  
  30. User::find()->average();    此方法返回指定列的平均值;  
  31. User::find()->min();    此方法返回指定列的最小值 ;  
  32. User::find()->max();    此方法返回指定列的最大值 ;  
  33. User::find()->scalar();    此方法返回值的第一行第一列的查詢結果;  
  34. User::find()->column();    此方法返回查詢結果中的第一列的值;  
  35. User::find()->exists();    此方法返回一個值指示是否包含查詢結果的數據行;  
  36. User::find()->batch(10);  每次取 10 條數據   
  37. User::find()->each(10);  每次取 10 條數據, 迭代查詢  
  38. 二、查詢對象的方法  
  39. //根據主鍵查詢出一個對象,如:findByPk(1);  
  40. $admin=Admin::model()->findByPk($postID,$condition,$params);  
  41. $admin=Admin::model()->findByPk(1);  
  42.    
  43. //根據一個條件查詢出一組數據,可能是多個,但是他只返回第一行數據  
  44. $row=Admin::model()->find($condition,$params);  
  45. $row=Admin::model()->find('username=:name',array(':name'=>'admin'));  
  46.    
  47. //該方法是根據條件查詢一組數據,可以是多個條件,把條件放到數組裏面,查詢的也是第一條數據  
  48. $admin=Admin::model()->findByAttributes($attributes,$condition,$params);  
  49. $admin=Admin::model()->findByAttributes(array('username'=>'admin'));  
  50.    
  51. //該方法是根據SQL語句查詢一組數據,他查詢的也是第一條數據  
  52. $admin=Admin::model()->findBySql($sql,$params);  
  53. $admin=Admin::model()->findBySql("select * from admin where username=:name",array(':name'=>'admin'));  
  54.    
  55. //拼一個獲得SQL的方法,在根據find查詢出一個對象   
  56. $criteria=newCDbCriteria;   
  57. $criteria->select='username';// only select the 'title' column   
  58. $criteria->condition='username=:username';    //請注意,這是一個查詢的條件,且只有一個查詢條件.多條件用addCondition  
  59. $criteria->params=array(":username=>'admin'");  
  60. $criteria->order ="id DESC";  
  61. $criteria->limit ="3";  
  62. $post=Post::model()->find($criteria);// $params isnot needed   
  63.    
  64. //多條件查詢的語句  
  65. $criterianew CDbCriteria;       
  66. $criteria->addCondition("id=1");//查詢條件,即where id = 1   
  67. $criteria->addInCondition('id',array(1,2,3,4,5));//代表where id IN (1,2,3,4,5,);   
  68. $criteria->addNotInCondition('id',array(1,2,3,4,5));//與上面正好相法,是NOT IN   
  69. $criteria->addCondition('id=1','OR');//這是OR條件,多個條件的時候,該條件是OR而非AND   
  70. $criteria->addSearchCondition('name','分類');//搜索條件,其實代表了。。where name like '%分類%'   
  71. $criteria->addBetweenCondition('id', 1, 4);//between 1 and 4  
  72. $criteria->compare('id', 1);   //這個方法比較特殊,他會根據你的參數自動處理成addCondition或者addInCondition.  
  73. $criteria->compare('id',array(1,2,3));   //即如果第二個參數是數組就會調用addInCondition   
  74.    
  75.    
  76. $criteria->select ='id,parentid,name';//代表了要查詢的字段,默認select='*';   
  77. $criteria->join ='xxx'//連接表   
  78. $criteria->with ='xxx'//調用relations    
  79. $criteria->limit = 10;   //取1條數據,如果小於0,則不作處理   
  80. $criteria->offset = 1;  //兩條合併起來,則表示 limit 10 offset 1,或者代表了。limit 1,10   
  81. $criteria->order ='xxx DESC,XXX ASC' ;//排序條件   
  82. $criteria->group ='group 條件';   
  83. $criteria->having ='having 條件 ';   
  84. $criteria->distinct = FALSE;//是否唯一查詢  
  85. 三、查詢個數,判斷查詢是否有結果  
  86. //該方法是根據一個條件查詢一個集合有多少條記錄,返回一個int型數字  
  87. $n=Post::model()->count($condition,$params);  
  88. $n=Post::model()->count("username=:name",array(":name"=>$username));  
  89.    
  90. //該方法是根據SQL語句查詢一個集合有多少條記錄,返回一個int型數字  
  91. $n=Post::model()->countBySql($sql,$params);  
  92. $n=Post::model()->countBySql("select * from admin where username=:name",array(':name'=>'admin'));  
  93.    
  94. //該方法是根據一個條件查詢查詢得到的數組有沒有數據,如果有數據返回一個true,否則沒有找到  
  95. $exists=Post::model()->exists($condition,$params);  
  96. $exists=Post::model()->exists("name=:name",array(":name"=>$username));  
  97. 四、新增  
  98. $adminnew Admin;         
  99. $admin->username =$username;  
  100. $admin->password =$password;  
  101. if($admin->save() > 0){echo "添加成功"; }else{echo "添加失敗"; }  
  102. 五、修改  
  103. Post::model()->updateAll($attributes,$condition,$params);  
  104. $count=Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1'));  
  105. if($count> 0){ echo "修改成功"; }else{echo "修改失敗"; }  
  106.    
  107. $rt= PostList::model()->updateAll(array('status'=>'1'),'staff_id=:staff AND host_id=:host',array(':staff'=>$staff_id,':host'=>$host_id));  
  108.    
  109. //$pk主鍵,可以是一個也可以是一個集合,$attributes是要修改的字段的集合,$condition條件,$params傳入的值  
  110. Post::model()->updateByPk($pk,$attributes,$condition,$params);  
  111. $count=Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin'));  
  112. $count=Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin'));  
  113. if($count>0){echo "修改成功"; }else{echo "修改失敗"; }  
  114.    
  115. Post::model()->updateCounters($counters,$condition,$params);  
  116. $count=Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin'));  
  117. if($count> 0){ echo "修改成功"; }else{echo "修改失敗"; }  
  118. //array('status'=>1)代表數據庫中的admin表根據條件username='admin',查詢出的所有結果status字段都自加1  
  119. 六、刪除  
  120. //deleteAll  
  121. Post::model()->deleteAll($condition,$params);  
  122. $count= Admin::model()->deleteAll('username=:name and password=:pass',array(':name'=>'admin',':pass'=>'admin'));  
  123. $count= Admin::model()->deleteAll('id in("1,2,3")');//刪除id爲這些的數據  
  124. if($count>0){echo"刪除成功"; }else{echo "刪除失敗"; }  
  125.    
  126. //deleteByPk  
  127. Post::model()->deleteByPk($pk,$condition,$params);  
  128. $count= Admin::model()->deleteByPk(1);  
  129. $count=Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin'));  
  130. if($count>0){echo "刪除成功"; }else{echo "刪除失敗"; }  

直接數據庫操作

查詢

  1. //createCommand(執行原生的SQL語句)  
  2. $sql"SELECT u.account,i.* FROM sys_user as u left join user_info as i on u.id=i.user_id";  
  3. $rows=Yii::$app->db->createCommand($sql)->query();  
  4. foreach($rows as $k => $v){  
  5.     echo$v['add_time'];  
  6. }  
  7.   
  8. 查詢返回多行:  
  9.   
  10. $command = $connection->createCommand('SELECT * FROM post');  
  11. $posts = $command->queryAll();  
  12. 返回單行:  
  13.   
  14. $command = $connection->createCommand('SELECT * FROM post WHERE id=1');  
  15. $post = $command->queryOne();  
  16. 查詢多行單值:  
  17.   
  18. $command = $connection->createCommand('SELECT title FROM post');  
  19. $titles = $command->queryColumn();  
  20. 查詢標量值/計算值:  
  21.   
  22. $command = $connection->createCommand('SELECT COUNT(*) FROM post');  
  23. $postCount = $command->queryScalar();  

更新

  1. $command = $connection->createCommand('UPDATE post SET status=1 WHERE id=1');  
  2. $command->execute();  

插入更新刪除

  1. // INSERT  
  2. $connection->createCommand()->insert('user', [  
  3.     'name' => 'Sam',  
  4.     'age' => 30,  
  5. ])->execute();  
  6.   
  7. // INSERT 一次插入多行  
  8. $connection->createCommand()->batchInsert('user', ['name''age'], [  
  9.     ['Tom', 30],  
  10.     ['Jane', 20],  
  11.     ['Linda', 25],  
  12. ])->execute();  
  13.   
  14. // UPDATE  
  15. $connection->createCommand()->update('user', ['status' => 1], 'age > 30')->execute();  
  16.   
  17. // DELETE  
  18. $connection->createCommand()->delete('user''status = 0')->execute();  


事務

  1.    
  2. //事務的基本結構(多表更新插入操作請使用事務處理)  
  3. $dbTrans= Yii::app()->db->beginTransaction();  
  4. try{  
  5.     $postnew Post;  
  6.     $post->'title''Hello dodobook!!!';  
  7.     if(!$post->save())throw newException("Error Processing Request", 1);  
  8.     $dbTrans->commit();  
  9. //  $this->_end(0,'添加成功!!!');  
  10. }catch(Exception$e){  
  11.     $dbTrans->rollback();  
  12. //  $this->_end($e->getCode(),$e->getMessage()); 
發佈了26 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章