合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[TOC] # ActiveRecord 类型的增删改查 ![](https://box.kancloud.cn/cf49bc0b6bc8f878239763b95c3c2434_635x470.png) ![](https://box.kancloud.cn/d9112de485bc6d16b757408291e8cb56_514x410.png) ![](https://box.kancloud.cn/84867356fc564a9be8e860af333d4104_326x141.png) # Query查询数据 ![](https://box.kancloud.cn/b0aa99bb73fe924bc2cd03d5da024bd6_603x306.png) # db进行查询 ![](https://box.kancloud.cn/b8ec7e4a7a2bb0b7f2b85daf9b1d5628_667x562.png) # 在更新前执行 要判断父类有没有成功 ![](https://box.kancloud.cn/124d9b0db9c6cb0a38baafc24794c334_505x336.png) # 普通sql查询 使用PDO的占位符方式,防止sql注入。 ~~~ <?php namespace app\controllers; use app\models\Article; use yii\web\Controller; class HomeController extends Controller { public function actionIndex() { $id = \Yii::$app->request->get('id'); $sql = 'select * from article where id=:id'; $articles = $article = Article::findBySql($sql,[':id'=>$id])->all(); } } ~~~ ### 条件限制获取数据 以下查询`id`为数据表主键。 #### 查询单条数据 我们可以使用`where()`进行条件拼接查询也可以通过`findOne()`方法进行查询。 ~~~ $article = Article::find()->where(['id'=>5])->one(); $article = Article::findOne(5); $article = Article::findOne(['id'=>5]); ~~~ #### 查询`id`为`3`、`4`和`5`的数据 使用`findAll()`方法进行查询。 ~~~ $articles = Article::findAll([3,4,5]); ~~~ #### 查询大于`3`的数据 ~~~ $articles = Article::find()->where(['>','id',3])->all(); ~~~ #### 查询大于`2`且小于`5`的数据 ~~~ $articles = Article::find()->where(['between','id',2,5])->all(); ~~~ #### 模糊查询 根据其他字段进行模糊查询,如根据`title`字段进行模糊查询。 ~~~ $articles = Article::find()->where('like','title','模糊')->all(); ~~~ ### 将查询数据对象转成数组 在Laravel框架中,我们可以在使用连贯查询的时候使用`toArray()`方法将查询的数据对象转换成数组,方便使用。   那么在Yii2中,我们可以使用`asArray()`得到同样的效果。当然,如果查询的数据量比较大的话这样做能节省服务器内存,如: ~~~ $article = Article::find()->asArray()->all(); ~~~ ### 模型数据的新增 通过`add()`或者`save()`方法将数据写入到数据表,执行成功后它们返回的都是`true`。 ~~~ public function actionCreate() { $article = new Article; $article->title = 'insert title'; $article->views = 12; $article->save(); // 也可以使用 $article->add(); // 获取写入的数据id $id = $article->attributes['id']; } ~~~ ### 模型数据的删除 #### 删除单条数据 ~~~ $article = Article::findOne(10); $article->delete(); ~~~ > 成功返回1。 #### 删除多条数据 ~~~ Article::deleteAll('id=7'); // 删除id=7的数据 Article::deleteAll('id=:id',[':id'=>7]); // 同上 Article::deleteAll('id>:id',[':id'=>10]); // 删除id>10的数据 Article::delteteAll('id>:id AND views < :views',[':id'=>10,':views'=>100]); // 删除id>10并且查看次数小于100。 ~~~ ### 模型数据的修改 通过`update()`方法将数据更新到数据表,同时也可通过`save()`方法做同样的操作。如下: ~~~ public function actionUpdate() { $article = Article::findOne(9); $article->title = 'update title'; // $res = $article->update(); // 成功返回 1 $res = $article->save(); // 成功返回 true } ~~~ #### 更新数据表某个字段 更新`id = 9`的数据的`views`字段+1。成功返回1,失败返回0。 ~~~ Article::updateAllCounters(['views'=>1],['id'=>9]); ~~~ > `updateAllCounters()`的第二个参数一定要指定,否则将出现当前表全部被更新的情况。