Yii2数据库查询有关的操作

系统管理员 2022-07-21 11:11 303阅读 0赞

注:下文所说的Article为model

  1. use app\models\Article;

本文中的dd()函数,为我自己自定义的函数

  1. function dd($var){
  2. echo "<pre>";
  3. var_dump($var);
  4. echo "</pre>";
  5. die;
  6. }

1:防止sql注入,用站位符的方式

  1. $request=Yii::$app->request;
  2. $id=$request->get('id');
  3. $sql="select * from article where id=:id";
  4. $r=Article::findBysql($sql,[':id'=>$id])->all();

2:数据库查询操作

  1. 获取全部数据
  2. $data=Article::find()->all();
  3. 查询单条数据id=5
  4. $data=Article::find()->where(['id'=>'5'])->all();
  5. id>3的数据
  6. $data=Article::find()->where(['>','id',3])->all();
  7. id>2,id<5 id:2-5之间的
  8. $data=Article::find()->where(['between','id',2,5])->all();
  9. title like 111
  10. $data=Article::find()->where(['like','title',"111"])->all();
  11. 查询单条数据id=5 one()方法返回的是个对象,all()方法返回的是个大数组里面为对象
  12. $data=Article::find()->where(['id'=>'5'])->one();
  13. 查询一条数据 id=5的,因为id为主键
  14. $data=Article::findOne(5);
  15. 查询多条数据 id=3,4,5的,因为id为主键
  16. $data=Article::findAll([3,4,5]);
  17. dd($data);

3:大数据查询省内存处理

  1. 从数据库取出来的是一个个的对象,为了节省内存常常需要用asArray()方法转换成为数组。
  2. $data=Article::find()->asArray()->all();
  3. 打印结果例如:

Center

  1. 如果取的数据特别多,比如一下取出1000条数据,如果都以对象的方式,会特别耗费内存,yii给提供的方式,就是
  2. 通过batch()方法,指定每次查询几条,分多次查询,比如1000条数据,先查询前100条,然后存入一个数组中,再查
  3. 100条,再存入该数组,分10次取出,就相当于只占了100条的内存。每100个一组。
  4. 两条两条的取,输出结果为2-2-1-
  5. foreach(Article::find()->batch(2) as $article){
  6. echo count($article),'-';
  7. }
  8. foreach(Article::find()->batch(2) as $article){
  9. $data[] = $article;
  10. }

打印$data的结果为:

Center 1

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读

    相关 yii2时间范围查询

    1.时间范围这个应该都不陌生 但是你要注意你的模型里面只有你数据库的规定字段,现在你需要的是通过两个值即两个字段去查询这一个值所在的范围 2.那么就需要你在模型中定义两