使用Laravel中的查询构造器实现增删改查功能 |
引言 上一篇介绍了如何在windows环境下跑一个 读这篇文章时我默认你已拥有如下知识:
正文 实现增删改查前, 我们先准备一些步骤:
开启服务我们打开上篇文章介绍的 然后cmd上键入命令: D:/wnmp/Wnmp/php/php-cgi.exe -b 127.0.0.1:9000 -c D:/wnmp/Wnmp/php/php.ini 新建一个数据库, 我命名为 分别:
数据表新建完成后, 我往里面随意插入了几条数据, 下图: 准备步骤已经完成, 我们打开上篇文章介绍的 查看Laravel文档能够知道 因为我们是mysql数据库, 所以找到对应的mysql选项: 查看 打开 配置大家看对应的key值就知道是什么含义了, 这里提下数据库密码, 为什么是 Copyright (c) 2012 - 2019, Kurt Cancemi (kurt@x64architecture.com) Donations are appreciated no matter if big or small. https://wnmp.x64architecture.com/donate/ Wnmp is an easy Nginx, MariaDB and PHP environment for Windows. The default login for MySQL/MariaDB/phpMyAdmin is: username: root password: password Note: you can change it via phpMyAdmin 根据文件内容 我们知道了密码是: 但如果是生产环境, 大家使用集成环境包的时候一定要变更数据库密码. 另外文中没有介绍项目的具体目录结构, 建议大家看下官方文档, 熟悉一下. 到这里项目的数据库配置就已经配完了, 关联了本地的 现在我们需要配置一下 看到这里的同学也建议看一下 laravel 的路由文档, 因为文中讲的不是很细, 传送门: https://learnku.com/docs/lara... 顺便一说, 我个人选择 我这里先写几个路由, 大家感受一下: Route::get('test/queryUsers',['uses' => 'TestController@queryUsers']); Route::post('test/queryUsers',['uses' => 'TestController@queryUsers']); Route::get('test/queryUsers/{id}',['uses' => 'TestController@queryUsers']); Route::match(['get','post'],'test/queryUsers',['uses' => 'TestController@queryUsers']); Route::any('test/queryUsers',['uses' => 'TestController@queryUsers']); 我们知道熟知的http请求方式有 a. 我们来依次解析上面的路由, 先看第1条: Route::get('test/queryUsers',['uses' => 'TestController@queryUsers']); 此路由指定了 这里出现了两个名词 注: laravel是一个 查询 控制器在项目里的 <?php namespace AppHttpControllers; use appMember; use IlluminateSupportFacadesDB; use SymfonyComponentRoutingAnnotationRoute; class TestController extends Controller { public function queryUsers() { $users = DB::table('user')->get(); return $users; } } 我们先来看结果, 地址栏键入(域名 + 路由): 代码里很亮眼的一行: DB::table('user')->get(); 这行代码表示查询 shop数据库 b. 现在我们来解析上面路由的第2条: Route::post('test/queryUsers',['uses' => 'TestController@queryUsers']); 这条路由和第1条路由只有一个 现在我们在 我们点击 纳尼?怎么没有得到我们期望的结果, 很显然哪里不对,我们再来看看路由的文档: https://learnku.com/docs/lara... 文档中我查找与 原来是 laravel 中为了解决
打开文件, 添加 protected $except = [ 'http://test.lara.com/test/queryUsers', ]; 完成这步后我们再打开 postman, 点击 c. 现在我们来解析上面路由的第3条: Route::get('test/queryUsers/{id}',['uses' => 'TestController@queryUsers']); 可以看出这条路由的区别在于路由末尾的 此时需要修改下 public function queryUsers() { $id = request()->id; // 此种方式获取参数 $users = DB::table('user')->where('id', $id)->get(); return json_encode($users); } 白话文解释一下这条sql: 在table表里查询id = $id(路由传递的值)的记录, 查看结果, 符合预期: d. 现在我们来解析上面路由的第4条和第5条: Route::match(['get','post'],'test/queryUsers',['uses' => 'TestController@queryUsers']); Route::any('test/queryUsers',['uses' => 'TestController@queryUsers']); 这俩路由我就不演示了, 分别解释一下, 而 我们再看看上面我设计的goods表 我们能看到这两条数据不知道创建的用户是谁, 但是有uid值, 这时候我们希望一个接口既返回商品信息又能够让我知道创建者是谁, 此时就需要用到多表联查了, 我们新增一个路由: Route::get('test/queryGoods',['uses' => 'TestController@queryGoods']); 然后 public function queryGoods() { $goods = DB::table('goods') ->leftJoin('user', 'goods.uid', '=', 'user.id') ->get(); return json_encode($goods); } 如期望一样返回数据: [{ id: 1, uid: 1, name: "测试商品1", desc: null, img_urls: null, price: "99.00", old_price: "78.00", real_name: "陈云", nickname: "穷摇.", head_url: null, age: null, gender: null, level: null }, { id: 2, uid: 2, name: "测试商品2", desc: null, img_urls: null, price: "290.00", old_price: "389.00", real_name: "欧阳欣欣", nickname: "小欣欣", head_url: null, age: null, gender: null, level: null } ] 但是用户信息所有字段全部被返回了, 有些时候我们为了安全, 只需要返回指定字段, 比如我们只需要返回 public function queryGoods() { $goods = DB::table('goods') ->leftJoin('user', 'goods.uid', '=', 'user.id') ->select('goods.*', 'user.real_name', 'user.head_url') ->get(); return json_encode($goods); } 关注下这行代码: select('goods.*', 'user.real_name', 'user.head_url') 这行代码表示返回goods表中的 新增 至此查询已经基本写的差不多了, 我们开始向数据表里 我们新增一个 Route::post('test/addUser',['uses' => 'TestController@addUser']); 添加 protected $except = [ 'http://test.lara.com/test/queryUsers', 'http://test.lara.com/test/addUser', ]; 然后 public function addUser() { $real_name = request()->real_name; $nickname = request()->nickname; DB::table('user')->insert( ['real_name' => $real_name, 'nickname' => $nickname] ); $users = DB::table('user')->get(); return json_encode($users); } 打开 {"real_name":"刘亦菲","nickname":"小菲菲"} 点击send, 发现数据如期望一样正确插入. 查询构造器提供 DB::table('user')->insert( ['real_name' => $real_name, 'nickname' => $nickname] ); 编辑 我们新增一个 同样添加 Route::put('test/updateUser',['uses' => 'TestController@updateUser']);
protected $except = [ 'http://test.lara.com/test/queryUsers', 'http://test.lara.com/test/addUser', 'http://test.lara.com/test/updateUser', ]; 然后 public function updateUser() { $id = request()->id; $nickname = request()->nickname; DB::table('user') ->where('id', $id) ->update(['nickname' => $nickname]); $users = DB::table('user')->get(); return json_encode($users); } 打开 {"id":"4", "nickname": "小阿菲'"} 点击send, 发现数据如期望一样正确更新. 查询构造器提供 ->where('id', $id)->->update(['nickname' => $nickname]); 删除 我们新增一个 Route::delete('test/deleteUser',['uses' => 'TestController@deleteUser']); 同样添加 protected $except = [ 'http://test.lara.com/test/queryUsers', 'http://test.lara.com/test/addUser', 'http://test.lara.com/test/updateUser', 'http://test.lara.com/test/deleteUser', ]; 然后 public function deleteUser() { $id = request()->id; DB::table('user') ->where('id', $id) ->delete(); $users = DB::table('user')->get(); return json_encode($users); } 打开
点击send, 发现数据如期望一样正确删除 (已经没有id为4的记录). laravel中查询构造器可以使用
文章有很多方法没有介绍到, 建议需要学习的同学看下文档, 传送门: https://learnku.com/docs/lara... 总结 以上所述是小编给大家介绍的使用Laravel中的查询构造器实现增删改查功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的 。在此也非常感谢大家对脚本之家网站的支持! |