博客列表 >laravel7.x 如何操作数据库

laravel7.x 如何操作数据库

我是郭富城
我是郭富城原创
2020年06月05日 05:59:52843浏览

本文上可以和原生查询的文章https://www.php.cn/blog/detail/22003.html对比

Laravel 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。它可用于执行应用程序中大部分数据库操作,且可在所有支持的数据库系统上运行。
Laravel 的查询构造器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递的字符串。

注意:PDO 不支持绑定列名。因此,不能让用户通过输入来指定查询语句所引用的列名,包括 order by 字段等等。 如果必须要允许用户通过选择某些列来进行查询,请始终根据允许列的白名单来校验列名。

1. 从数据表中获取单行或单列

如果你只需要从数据表中获取一行数据,可以使用 first 方法。该方法返回一个 StdClass 对象:

演示地址:http://www.php520.vip/dbfirst

  1. // 高级数据库查询的方法(链式调用)
  2. public function first() {
  3. $res=DB::table('article')->where('id','18')->first();
  4. echo '<pre>';
  5. print_r($res);
  6. }

2. 从数据表中获取全部数据

该 get 方法返回一个包含 Illuminate\Support\Collection 的结果,其中每个结果都是 PHP StdClass 对象的一个实例。可以访问字段作为对象的属性来访问每列的值:

演示地址:http://www.php520.vip/dbgetall

  1. // 查询所有数据
  2. public function getall() {
  3. $res=DB::table('article')->get();
  4. echo '<pre>';
  5. print_r($res);
  6. }

3. 查询指定的字段

仅查询 select(‘指定字段名’),如果需要给字段改名字,可以通过字段名后面 as 新的字段名

演示地址:http://www.php520.vip/dbgetselect

  1. // 查询指定字段
  2. public function getselect() {
  3. $res=DB::table('article')->select('cate_id as cid','title')->get();
  4. echo '<pre>';
  5. print_r($res);
  6. }

4. where 语句

在构造 where 查询实例的中,使用 where 方法需要传递三个参数:第一个参数是列名,第二个参数是任意一个数据库系统支持的运算符,第三个是该列要比较的值。

演示地址:http://www.php520.vip/dbgetwhere

  1. // 查询指定字段
  2. public function getselect() {
  3. $res=DB::table('article')->select('cate_id as cid','title')->get();
  4. echo '<pre>';
  5. print_r($res);
  6. }

5. like 查询

where(‘字段’,’like’,’%内容%’)

演示地址:http://www.php520.vip/dbgetlike

  1. // like
  2. public function getlike() {
  3. $res=DB::table('article')->where('title','like','%php%')->get();
  4. echo '<pre>';
  5. print_r($res);
  6. }

6. Or 语句

可以一起链式调用 where 约束,也可以在查询中添加 or 字句。 orWhere 方法和 where 方法接收的参数一样:

演示地址:http://www.php520.vip/dbgetor

  1. // or 语句
  2. public function getor() {
  3. $res=DB::table('article')->where('cate_id','11')->orWhere('cate_id','5')->get()->all();
  4. echo '<pre>';
  5. print_r($res);
  6. }

7. 获取 sql 语句

演示地址:http://www.php520.vip/dbgettosql

  1. // tosql
  2. public function gettosql() {
  3. $res=DB::table('article')->where('cate_id','11')->orWhere('cate_id','5')->tosql();
  4. echo '<pre>';
  5. print_r($res);
  6. }

8. whereIn 方法

whereIn 方法验证字段的值必须存在指定的数组里
演示地址:http://www.php520.vip/dbgetwherein

  1. // where in 查询
  2. public function getwherein() {
  3. $res=DB::table('article')->whereIn('id',[1,4,8])->get()->all();
  4. echo '<pre>';
  5. print_r($res);
  6. }

9. 连表查询

演示地址:http://www.php520.vip/dbgetjoin

  1. // 链表查询
  2. public function getjoin() {
  3. $res=DB::table('article')->join('users','users.id','=','article.uid')->select('article.id','article.cate_id','article.title','users.username as nickname')->get()->all();
  4. echo '<pre>';
  5. print_r($res);
  6. }

10. 计算平均值/和值/最小值/最大值/记录数

  • avg(),sum(),min(),max(),count()

演示地址:http://www.php520.vip/dbgetpvs

  1. //计算平均值
  2. public function pvs() {
  3. $res=DB::table('article')->avg('pv');
  4. echo $res;
  5. //计算平均值
  6. // $avg=0;
  7. // foreach ($res as $key => $value) {
  8. // $avg +=$value->pv;
  9. // }
  10. // $avg=$avg/count($res);
  11. // echo '<pre>';
  12. // echo $avg;
  13. }

11. 增加数据insert

演示地址:http://www.php520.vip/dbinsert2

  1. //增加数据
  2. public function insert2() {
  3. $res=DB::table('article')->insert(['uid'=>5,'cate_id'=>15,'title'=>"我最爱php了",'pv'=>260]);
  4. var_dump($res);
  5. }

12. 增加数据并获取主键insertGetId

演示地址:http://www.php520.vip/dbinsert3

  1. //增加数据并返回主键
  2. public function insert3() {
  3. $res=DB::table('article')->insertGetId(['uid'=>6,'cate_id'=>18,'title'=>"我最爱php了哈哈哈",'pv'=>520]);
  4. var_dump($res);
  5. }

13. 修改数据

演示地址:http://www.php520.vip/dbupdate2

  1. //修改数据
  2. public function update2() {
  3. $res=DB::table('article')->where('id',12)->update(['title'=>"update测试"]);
  4. var_dump($res);
  5. }

14.删除数据

演示地址:http://www.php520.vip/dbdelete2

  1. //修改数据
  2. public function delete2() {
  3. $res=DB::table('article')->where('id',23>delete();
  4. var_dump($res);
  5. }

15. 完整控制器代码

  1. <?php
  2. /**
  3. * @Author: Nicola
  4. * @Date: 2020-06-04 17:35:44
  5. * @email: admin@nicola.com
  6. * @Last Modified by: Nicola
  7. * @Last Modified time: 2020-06-05 05:57:23
  8. */
  9. // 命名空间:和目录对应
  10. // 类名称要和文件名称一致
  11. namespace App\Http\Controllers;
  12. //引入数据库DB类
  13. use Illuminate\Support\Facades\DB;
  14. /**
  15. *继承类
  16. */
  17. class Home extends Controller
  18. {
  19. public function index() {
  20. // return 'www.php.cn';
  21. // 输出一个视图(view是laravel内核定义好)
  22. $time=date('Y-m-d H:i:s');
  23. $res=DB::select('select * from article');
  24. // $name='nicola';
  25. // echo '<pre>';
  26. // $data=[];
  27. // $data['time']=$time;
  28. // $data['name']='laravel基础教学';
  29. $datas=[];
  30. foreach ($res as $key => $value) {
  31. $datas[]=(array)$value;
  32. }
  33. $data['result']=$datas;
  34. // echo '<pre>';
  35. // print_r($data);
  36. // echo $data;
  37. // return view('test',['time'=>$time,'name'=>$name]);
  38. return view('test',$data);
  39. // return view('test')->with('time',$time)->with('name',$name);
  40. }
  41. //数据库查询(原生)
  42. public function get(){
  43. //select * from article
  44. $res=DB::select('select * from article where id >5');
  45. echo '<pre>';
  46. print_r($res);
  47. }
  48. //数据库更新操作(原生)
  49. public function update() {
  50. $res=DB::update('update article set title="我是最爱php的" where id=3');
  51. var_dump($res);//返回更新的行数(0和1)
  52. }
  53. //数据库新增操作(原生)
  54. public function insert() {
  55. $res=DB::insert('insert article(`uid`,`cate_id`,`title`,`pv`) values(2,5,"我是最爱php的yoyoyo",520)');
  56. // exit(print_r($res));
  57. var_dump($res);//返回时布尔值(true/false)
  58. }
  59. //数据库删除操作(原生)
  60. public function delete() {
  61. $res=DB::delete('delete from article where id=6');
  62. var_dump($res);//返回更新的行数(0和1)
  63. }
  64. // 高级数据库查询的方法(链式调用)
  65. public function first() {
  66. $res=DB::table('article')->where('id','24')->first();
  67. echo $res->title;
  68. echo '<pre>';
  69. print_r($res);
  70. }
  71. // 查询所有数据
  72. public function getall() {
  73. $res=DB::table('article')->get();
  74. echo '<pre>';
  75. print_r($res);
  76. }
  77. // 查询指定字段
  78. public function getselect() {
  79. $res=DB::table('article')->select('cate_id as cid','title')->get();
  80. echo '<pre>';
  81. print_r($res);
  82. }
  83. // where语句
  84. public function getwhere() {
  85. $res=DB::table('article')->select('cate_id as cid','title')->where('cate_id',11)->get();
  86. echo '<pre>';
  87. print_r($res);
  88. }
  89. // like
  90. public function getlike() {
  91. $res=DB::table('article')->where('title','like','%php%')->get();
  92. echo '<pre>';
  93. print_r($res);
  94. }
  95. // or 语句
  96. public function getor() {
  97. $res=DB::table('article')->where('cate_id','11')->orWhere('cate_id','5')->get()->all();
  98. echo '<pre>';
  99. print_r($res);
  100. }
  101. // tosql
  102. public function gettosql() {
  103. $res=DB::table('article')->where('cate_id','11')->orWhere('cate_id','5')->tosql();
  104. echo '<pre>';
  105. print_r($res);
  106. }
  107. // where in 查询
  108. public function getwherein() {
  109. $res=DB::table('article')->whereIn('id',[1,4,8])->get()->all();
  110. echo '<pre>';
  111. print_r($res);
  112. }
  113. // 链表查询
  114. public function getjoin() {
  115. $res=DB::table('article')->join('users','users.id','=','article.uid')->select('article.id','article.cate_id','article.title','users.username as nickname')->get()->all();
  116. echo '<pre>';
  117. print_r($res);
  118. }
  119. //计算平均值
  120. public function pvs() {
  121. $res=DB::table('article')->avg('pv');
  122. echo $res;
  123. //计算平均值
  124. // $avg=0;
  125. // foreach ($res as $key => $value) {
  126. // $avg +=$value->pv;
  127. // }
  128. // $avg=$avg/count($res);
  129. // echo '<pre>';
  130. // echo $avg;
  131. }
  132. //增加数据
  133. public function insert2() {
  134. $res=DB::table('article')->insert(['uid'=>5,'cate_id'=>15,'title'=>"我最爱php了",'pv'=>260]);
  135. var_dump($res);
  136. }
  137. //增加数据并返回主键
  138. public function insert3() {
  139. $res=DB::table('article')->insertGetId(['uid'=>6,'cate_id'=>18,'title'=>"我最爱php了哈哈哈",'pv'=>520]);
  140. var_dump($res);
  141. }
  142. //修改数据
  143. public function update2() {
  144. $res=DB::table('article')->where('id',12)->update(['title'=>"update测试"]);
  145. var_dump($res);
  146. }
  147. //删除数据
  148. public function delete2() {
  149. $res=DB::table('article')->where('id',18)->delete();
  150. var_dump($res);
  151. }
  152. }

16. 完整路由代码

  1. <?php
  2. /**
  3. * @Author: Nicola
  4. * @Date: 2020-06-03 00:01:11
  5. * @email: admin@nicola.com
  6. * @Last Modified by: Nicola
  7. * @Last Modified time: 2020-06-05 05:20:40
  8. */
  9. use Illuminate\Support\Facades\Route;
  10. /*
  11. |--------------------------------------------------------------------------
  12. | Web Routes
  13. |--------------------------------------------------------------------------
  14. |
  15. | Here is where you can register web routes for your application. These
  16. | routes are loaded by the RouteServiceProvider within a group which
  17. | contains the "web" middleware group. Now create something great!
  18. |
  19. */
  20. // Route::get('路径','函数')
  21. Route::get('/', function () {
  22. return view('welcome');//视图 视图引擎
  23. // echo "欢迎光临php中文网";
  24. // echo date('Y-m-d H:i:s');
  25. });
  26. //访问控制器中某个类的方法,请求映射到控制器中
  27. Route::get('/home','Home@index');
  28. Route::get('/dbselect','Home@get');
  29. Route::get('/dbupdate','Home@update');
  30. Route::get('/dbinsert','Home@insert');
  31. Route::get('/dbdelete','Home@delete');
  32. Route::get('/dbfirst','Home@first');
  33. Route::get('/dbgetall','Home@getall');
  34. Route::get('/dbgetselect','Home@getselect');
  35. Route::get('/dbgetwhere','Home@getwhere');
  36. Route::get('/dbgetlike','Home@getlike');
  37. Route::get('/dbgetor','Home@getor');
  38. Route::get('/dbgettosql','Home@gettosql');
  39. Route::get('/dbgetwherein','Home@getwherein');
  40. Route::get('/dbgetjoin','Home@getjoin');
  41. Route::get('/dbgetpvs','Home@pvs');
  42. Route::get('/dbinsert2','Home@insert2');
  43. Route::get('/dbinsert3','Home@insert3');
  44. Route::get('/dbupdate2','Home@update2');
  45. Route::get('/dbdelete2','Home@delete2');

17. 总结

Laravel Query Builder 查询构造器(query builder)提供方便、流畅的接口,用来建立及执行数据库查找语法,使用 PDO 参数绑定,以保护应用程序免于 SQL 注入。因此传入的参数不需额外转义特殊字符,基本可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议