使用Laravel中的查询构造器实现增删改查功能
Laravel  /  管理员 发布于 8年前   394
引言 上一篇介绍了如何在windows环境下跑一个 读这篇文章时我默认你已拥有如下知识: 正文 实现增删改查前, 我们先准备一些步骤: 开启服务我们打开上篇文章介绍的 然后cmd上键入命令: 新建一个数据库, 我命名为 分别: 数据表新建完成后, 我往里面随意插入了几条数据, 下图: 准备步骤已经完成, 我们打开上篇文章介绍的 查看Laravel文档能够知道 因为我们是mysql数据库, 所以找到对应的mysql选项: 查看 打开 配置大家看对应的key值就知道是什么含义了, 这里提下数据库密码, 为什么是 根据文件内容 我们知道了密码是: 但如果是生产环境, 大家使用集成环境包的时候一定要变更数据库密码. 另外文中没有介绍项目的具体目录结构, 建议大家看下官方文档, 熟悉一下. 到这里项目的数据库配置就已经配完了, 关联了本地的 现在我们需要配置一下 看到这里的同学也建议看一下 laravel 的路由文档, 因为文中讲的不是很细, 传送门: https://learnku.com/docs/lara... 顺便一说, 我个人选择 我这里先写几个路由, 大家感受一下: 我们知道熟知的http请求方式有 a. 我们来依次解析上面的路由, 先看第1条: 此路由指定了 这里出现了两个名词 注: laravel是一个 查询 控制器在项目里的 我们先来看结果, 地址栏键入(域名 + 路由): 代码里很亮眼的一行: 这行代码表示查询 shop数据库 b. 现在我们来解析上面路由的第2条: 这条路由和第1条路由只有一个 现在我们在 我们点击 纳尼?怎么没有得到我们期望的结果, 很显然哪里不对,我们再来看看路由的文档: https://learnku.com/docs/lara... 文档中我查找与 原来是 laravel 中为了解决 打开文件, 添加 完成这步后我们再打开 postman, 点击 c. 现在我们来解析上面路由的第3条: 可以看出这条路由的区别在于路由末尾的 此时需要修改下 白话文解释一下这条sql: 在table表里查询id = $id(路由传递的值)的记录, 查看结果, 符合预期: d. 现在我们来解析上面路由的第4条和第5条: 这俩路由我就不演示了, 分别解释一下, 而 我们再看看上面我设计的goods表 我们能看到这两条数据不知道创建的用户是谁, 但是有uid值, 这时候我们希望一个接口既返回商品信息又能够让我知道创建者是谁, 此时就需要用到多表联查了, 我们新增一个路由: 然后 如期望一样返回数据: 但是用户信息所有字段全部被返回了, 有些时候我们为了安全, 只需要返回指定字段, 比如我们只需要返回 关注下这行代码: 这行代码表示返回goods表中的 新增 至此查询已经基本写的差不多了, 我们开始向数据表里 我们新增一个 添加 然后 打开 点击send, 发现数据如期望一样正确插入. 查询构造器提供 编辑 我们新增一个 同样添加 然后 打开 点击send, 发现数据如期望一样正确更新. 查询构造器提供 删除 我们新增一个 同样添加 然后 打开 点击send, 发现数据如期望一样正确删除 (已经没有id为4的记录). laravel中查询构造器可以使用 文章有很多方法没有介绍到, 建议需要学习的同学看下文档, 传送门: https://learnku.com/docs/lara... 总结 以上所述是小编给大家介绍的使用Laravel中的查询构造器实现增删改查功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!laravel
项目,这一篇写如何使用 laravel 中的 查询构造器
实现增删改查。Wnmp.exe
-> Start all
D:/wnmp/Wnmp/php/php-cgi.exe -b 127.0.0.1:9000 -c D:/wnmp/Wnmp/php/php.ini
shop
, 然后新建两张表goods -> 商品表 user -> 用户表
testLaravel
项目数据库配置
在 config/database.php
里,database.php
文件的mysql配置我们能够看到配置值是 变量
, 指向的是项目根目录的 .env
文件.env
文件, 我们填写对应的mysql真实配置, 下图:password
呢? 查看Wnmp安装目录, 我们能看到有一个 readme.txt
的文件, 文件的文本内容如下:Copyright (c) 2012 - 2019, Kurt Cancemi ([email protected])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: rootpassword: passwordNote: you can change it via phpMyAdmin
password
, 因为是本地开发环境 这里就不更改密码了,shop
数据库.路由
, 所有的 Laravel 路由
的配置都在根目录的 routes
里, routes
目录中有4个路由配置文件, 这里不谈其中区别, 只关注 web.php
, 后面所有路由我们都在此文件里追加.laravel
作为深入学习的php框架, laravel优雅的路由是我选择它的一个重要原因.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']);
get
和 post
两种.Route::get('test/queryUsers',['uses' => 'TestController@queryUsers']);
get
方式请求, 路由为 test/queryUsers
, 逻辑会走向 TestController
控制器的 queryUsers
方法控制器
和 方法
mvc框架
, 关于 mvc
的理解需要自己查些资料看看.App/Http/Controllers
目录里, 这里我新增一个 TestController
控制器, TestController
里新增一个 queryUsers
方法:get(); return $users; }}
http://test.lara.com/test/queryUsers
:DB::table('user')->get();
user
表的全部数据, 所以我们看到 user
表中的3条记录都被返回了.Route::post('test/queryUsers',['uses' => 'TestController@queryUsers']);
post
的区别, 没错, 这是一个post请求的路由, 我们知道post请求方式无法在浏览器地址栏键入路由来得到结果, 所以我们需要使用一个工具 Postman
, 这是个好东西, 如果有同学没用过或是不知道它, 建议查一下熟悉一下, 文中不介绍它.Postman
新建一个请求, 如图:send
得到 :post
字眼的相关马迹, 看到:CSRF
造成的, 无论是前端同学还是后端同学, 应该都对这个词不陌生, 跨站请求伪造
CSRF
这个隐患, 默认有保护机制, 我们需要配置 CSRF 白名单
, 根据文档, 我们知道 CSRF 白名单
的配置在 VerifyCsrfToken
中间件里, VerifyCsrfToken
中间件所在路径:App/Http/Middleware/VerifyCsrfToken.php
CSRF 白名单
,protected $except = [ 'http://test.lara.com/test/queryUsers', ];
send
可以看到数据如期望返回:Route::get('test/queryUsers/{id}',['uses' => 'TestController@queryUsers']);
{id}
, 开发中我们会有这样的需求, 前端传递一个用户id, 后端返回这个id对应的该用户信息TestController
控制器 queryUsers
方法:public function queryUsers() { $id = request()->id; // 此种方式获取参数 $users = DB::table('user')->where('id', $id)->get(); return json_encode($users); }
Route::match(['get','post'],'test/queryUsers',['uses' => 'TestController@queryUsers']);Route::any('test/queryUsers',['uses' => 'TestController@queryUsers']);
match
里路由为指定的请求方式, 一种或多种,any
则是匹配任意方式, 无论是通过 get
还是 post
方式请求, 都能得到我们想要的结果.Route::get('test/queryGoods',['uses' => 'TestController@queryGoods']);
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 }]
user
表中的 real_name
和 head_url
字段, 那么我们就需要做一下字段的约束: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')
所有字段
以及user表中的 real_name
和 head_url
字段, 就完美达到了我们想要的结果.新增
数据post
请求的路由 test/addUser
:Route::post('test/addUser',['uses' => 'TestController@addUser']);
CSRF 路由白名单
protected $except = [ 'http://test.lara.com/test/queryUsers', 'http://test.lara.com/test/addUser', ];
TestController
里新增一个 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); }
postman
, 添加参数:{"real_name":"刘亦菲","nickname":"小菲菲"}
insert
方法用于插入记录到数据库中。 insert 方法接收数组形式的字段名和字段值进行插入操作DB::table('user')->insert( ['real_name' => $real_name, 'nickname' => $nickname] );
put
请求的路由 test/updateUser
:CSRF
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', ];
TestController
里新增一个 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); }
postman
, 我们知道刚刚新增的记录返回的 刘亦菲
的id是4, 我们根据 id
来更新下它的 nickname
, postman 里添加请求参数:{"id":"4", "nickname": "小阿菲~"}
update
方法用于更新已有的记录。 接受包含要更新的字段及值的数组->where('id', $id)->->update(['nickname' => $nickname]);
delete
请求的路由 test/deleteUser
:Route::delete('test/deleteUser',['uses' => 'TestController@deleteUser']);
CSRF 路由白名单
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', ];
TestController
里新增一个 deleteUser
方法:public function deleteUser() { $id = request()->id; DB::table('user') ->where('id', $id) ->delete(); $users = DB::table('user')->get(); return json_encode($users); }
postman
, 我们现在想把 刘亦菲
的记录在数据库里删掉, 我们知道她的 id
是 4, 我们根据 id
来删除它, 添加请求参数:{"id":"4"}
delete
方法从表中删除记录。添加 where
子句来约束 delete 的条件:->where('id', $id)->delete();
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号