Laravel5.1 框架数据库查询构建器用法实例详解
本文实例讲述了Laravel5.1框架数据库查询构建器用法。分享给大家供大家参考,具体如下:
今儿个咱说说查询构建器。它比运行原生SQL要简单些,它的操作面儿也是比较广泛的。
1查询结果
先来看看它的语法:
publicfunctiongetSelect() { $result=DB::table('articles')->get(); dd($result); }
查询构建器就是通过table方法返回的,使用get()可以返回一个结果集(array类型)这里是返回所有的数据,当然你也可以链接很多约束。
1.1获取一列/一行数据
publicfunctiongetSelect() { $result=DB::table('articles')->where('title','learndatabase')->get();//获取整列数据 $articles=DB::table('articles')->where('title','learndatabase')->first();//获取一行数据 dd($result,$articles); }
我们可以通过where来增添条件。
1.2获取数据列值列表
如果你想要取到某列的值的话可以使用lists方法:
publicfunctiongetSelect() { $result=DB::table('articles')->where('id','<',2)->lists('title'); $titles=DB::table('articles')->lists('title'); dd($result,$titles); }
1.3获取组块儿结果集
在我们数据表中数据特别特别多时可以使用组块结果集就是一次获取一小块数据进行处理
publicfunctiongetSelect() { DB::table('articles')->chunk(2,function($articles){ foreach($articlesas$article){ echo$article->title; echo"
"; } }); }
如果说要终止组块运行的话返回false就可以了:
publicfunctiongetSelect() { DB::table('articles')->chunk(2,function($articles){ returnfalse; }); }
1.4聚合函数
构建器还提供了很多的实用方法供我们使用:
- count方法:返回构建器查询到的数据量。
- max方法:传入一列返回这一列中最大的值。
- min方法:跟max方法类似,它返回最小的值。
- sum方法:返回一列值相加的和。
- avg方法:计算平均值。
1.4.1count
publicfunctiongetArticlesInfo() { $article_count=DB::table('articles')->count(); dd($article_count); }
1.4.2max
publicfunctiongetArticlesInfo() { $maxCommentCount=DB::table('articles')->max('comment_count'); dd($maxCommentCount); }
1.4.3sum
publicfunctiongetArticlesInfo() { $commentSum=DB::table('articles')->sum('comment_count'); }
1.4.4avg
publicfunctiongetArticlesInfo() { $commentAvg=DB::table('articles')->avg('comment_count'); dd($commentAvg); }
1.5select查询
1.5.1自定义子句
select语句可以获取指定的列,并且可以自定义键:
publicfunctiongetArticlesInfo() { $articles=DB::table('articles')->select('title')->get(); //输出结果: //array:3[▼ //0=>{#150▼ //+"title":"laraveldatabase" //} //1=>{#151▼ //+"title":"learndatabase" //} //2=>{#152▼ //+"title":"alex" //} //] $articles1=DB::table('articles')->select('titleasarticles_title')->get(); //输出结果: //array:3[▼ //0=>{#153▼ //+"articles_title":"laraveldatabase" //} //1=>{#154▼ //+"articles_title":"learndatabase" //} //2=>{#155▼ //+"articles_title":"alex" //} //] $articles2=DB::table('articles')->select('titleasarticles_title','idasarticles_id')->get(); //array:3[▼ //0=>{#156▼ //+"articles_title":"laraveldatabase" //+"articles_id":1 //} //1=>{#157▼ //+"articles_title":"learndatabase" //+"articles_id":2 //} //2=>{#158▼ //+"articles_title":"alex" //+"articles_id":3 //} //] }
1.5.2distinct方法
关于distinct方法我还没弄明白到底是什么意思适用于什么场景,也欢迎大神们给出个答案谢谢
distinct方法允许你强制查询返回不重复的结果集。
publicfunctiongetArticlesInfo() { $articles=DB::table('articles')->distinct()->get(); }
1.5.3addSelect方法
如果你想要添加一个select可以这样做:
publicfunctiongetArticlesInfo() { $query=DB::table('articles')->select('titleasarticles_title'); $articles=$query->addSelect('id')->get(); dd($articles); }
2where语句
where语句是比较常用的,经常用他来进行条件筛选。
2.1where基础介绍
现在来详细介绍下where方法它接收三个参数:
- 列名,这个没什么好说的。
- 数据库系统支持的操作符,比如说”=“、”<“、”like“这些,如果不传入第二个参数那么默认就是”=“等于。
- 要比较的值。
publicfunctiongetArticlesInfo() { $articles1=DB::table('articles')->where('id','2')->get();//等于 $articles2=DB::table('articles')->where('id','>','2')->get();//大于 $articles3=DB::table('articles')->where('id','<>','2')->get();//不等于 $articles4=DB::table('articles')->where('id','<=','2')->get();//小于等于 $articles5=DB::table('articles')->where('title','LIKE','%base')->get();//类似 }
2.2orWhere
orWhere和where接收的参数是一样的,当where逻辑没有查找到or查找到了返回or的结果,当where查找到了or也查找到了返回它们的结果。
publicfunctiongetArticlesInfo() { $articles=DB::table("articles")->where('id','=','5')->orWhere('title','laraveldatabase')->get(); dd($articles); }
2.3whereBetween和whereNotBetween
whereBetween是指列值是否在所给定的值之间:
publicfunctiongetArticlesInfo() { $articles=DB::table("articles")->whereBetween('id',[1,3])->get(); dd($articles); }
↑上述代码是查找id在1~3之间的集合。
whereNotBetween和whereBetween相反:
publicfunctiongetArticlesInfo() { $articles=DB::table("articles")->whereNotBetween('id',[1,3])->get(); dd($articles); }
↑上述代码是查找id不在1~3之间的集合。
2.4whereIn和whereNotIn
whereIn是查找列值在给定的一组数据中:
publicfunctiongetArticlesInfo() { $articles=DB::table("articles")->whereIn('id',[1,3,5,8])->get(); dd($articles); }
↑上述代码中是查找ID为1,3,5,8的集合,不过我们数据库中只有id为1和3的数据那么它只会返回id为1和3的集合。
whereNotIn和whereIn相反的:
publicfunctiongetArticlesInfo() { $articles=DB::table("articles")->whereNotIn('id',[1,3,5,8])->get(); dd($articles); }
↑上述代码中是查找ID不是1,3,5,8的集合。
2.5whereNull和whereNotNull
whereNull是查找列值为空的数据:
publicfunctiongetArticlesInfo() { $articles=DB::table("articles")->whereNull('created_at')->get(); dd($articles); }
↑上述代码中是查找created_at为空的集合。
whereNotNull就不用说啦:
publicfunctiongetArticlesInfo() { $articles=DB::table("articles")->whereNotNull('created_at')->get(); dd($articles); }
↑上述代码中是查找created_at不为空的集合。
3插入数据
先看下最简单的插入方法:
publicfunctiongetInsertArticle() { //插入一条数据: DB::table('articles')->insert( ['title'=>'getmore','body'=>'emmmmmm......'] ); //插入多条数据: DB::table('articles')->insert([ ['title'=>'testTitle1','body'=>'testBody1'], ['title'=>'testTitle2','body'=>'testBody2'], //.... ]); }
当你需要拿到插入数据的ID的话,可以使用获取自增ID的方法:
publicfunctiongetInsertArticle() { //插入一条数据: $id=DB::table('articles')->insertGetId( ['title'=>'getmore','body'=>'emmmmmm......'] ); dd($id); }
4更新
publicfunctiongetUpdateArticle() { $result=DB::table('articles')->whereBetween('id',[1,3])->update(['comment_count'=>0]); dd($result); }
↑update还可以返回影响了几条数据。
4.1加/减快捷方法
publicfunctiongetUpdateArticle() { $result=DB::table('articles')->whereBetween('id',[1,3])->increment('comment_count',2); dd($result); }
↑increment接受1~2个参数,第一个参数是列名,第二个参数是可选的表示增加几(默认是1),上面的语句是:comment_count这一列的值增加2。
publicfunctiongetUpdateArticle() { $result=DB::table('articles')->whereBetween('id',[1,3])->decrement('comment_count',2); dd($result); }
↑decrement接受1~2个参数,第一个参数是列名,第二个参数是可选的表示减少几(默认是1),上面的语句是:comment_count这一列的值减少2。
你以为加减快捷方法只接收两个参数么?nonono它还可以接收第三个参数:
publicfunctiongetUpdateArticle() { $result=DB::table('articles')->whereBetween('id',[1,3])->increment('comment_count',2,['title'=>'testUpdate']); dd($result); }
↑它还可以在增加/减少时对其他列进行修改。
5删除
publicfunctiongetDeleteArticle() { $result=DB::table('articles')->whereBetween('id',[1,3])->delete(); dd($result); }
↑用delete删除数据,它也返回有多少行被影响。
当你想要删除所有的列并且把自增ID归0的话可以这么做:
publicfunctiongetDeleteArticle() { DB::table('articles')->truncate(); }
6锁
查询构建器还包含一些方法帮助你在select语句中实现”悲观锁“。可以在查询中使用sharedLock方法从而在运行语句时带一把”共享锁“。共享锁可以避免被选择的行被修改直到事务提交:
DB::table('articles')->where('id','>',100)->sharedLock()->get();
此外你还可以使用lockForUpdate方法。”forupdate“锁避免选择行被其它共享锁修改或删除:
DB::table('articles')->where('id','>',100)->lockForUpdate()->get();
更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。