Yii2数据库查询有关的操作

注:下文所说的Article为model

use app\models\Article;


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

function dd($var){
    echo "<pre>";
    var_dump($var);
    echo "</pre>";
    die;
}



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

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

2:数据库查询操作

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

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

从数据库取出来的是一个个的对象为了节省内存常常需要用asArray()方法转换成为数组
$data=Article::find()->asArray()->all();

打印结果例如:


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


foreach(Article::find()->batch(2) as $article){
    $data[] = $article;
}

打印$data的结果为:






  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值