手机版

利用Laravel中的查询构造函数实现查询的添加、删除和修改功能

时间:2021-08-20 来源:互联网 编辑:宝哥软件园 浏览:

上一篇文章介绍了如何在windows环境下运行一个laravel项目,本文写了如何在laravel中使用查询构造函数实现添加、删除、修改和查询。

读这篇文章时,我默认你有以下知识:

了解php的基本语法,了解数据库设计,了解常用的sql查询文本

在添加、删除和检查之前,我们首先准备一些步骤:

Php、nginx、mysql服务已正确启用。创建一个新的数据库及其数据表来打开服务。我们打开上一篇文章中介绍的Wnmp.exe-startall

然后在cmd上键入命令:

创建一个新的数据库。我给它命名为商店,然后创建两个新表

分别为:

商品-商品表用户-用户表

创建新的数据表后,我向其中随机插入了几条数据,如下图:所示

准备步骤已经完成,我们打开了上一篇文章中介绍的testLaravel项目

查看Laravel文档就知道数据库是在config/database.php中配置的,

因为我们是一个mysql数据库,所以我们找到了相应的mysql选项:

查看database.php文件的mysql配置,我们可以看到配置值是一个变量,指向。项目根目录的env文件

打开。env文件,我们填写相应的mysql真实配置,如下图:所示

看相应的键值就知道是什么意思了。在这里,输入数据库密码。为什么是密码?查看Wnmp安装目录,可以看到有一个readme.txt文件,文件的文本内容如下:

版权所有(c) 2012 - 2019年,库尔特坎塞米([emailprotected])无论大公司或small.https://wnmp.x64architecture.com/donate/Wnmp是一个简单的Nginx、MariaDB和PHP环境,都非常感谢捐赠。MySQL/MariaDB/Phpmyadmin的默认登录是:用户名: rootpassword :密码注意:你可以通过Phpmyadmin根据文件的内容进行更改,我们知道密码是:密码,因为是本地开发环境,所以我们这里不会更改密码。

但是,如果是生产环境,则必须在使用集成环境包时更改数据库密码。

此外,本文没有介绍项目的具体目录结构。建议你看看官方文件,熟悉一下。

这里,项目的数据库配置已经完成,本地店铺数据库已经关联。

现在,我们需要配置路由。所有Laravel路由都是在根目录中的路由中配置的。routes目录中有四个路由配置文件。我们在这里不讨论差异,只关注web.php。我们将在这个文件中追加所有后面的路由。

看到这里的同学也建议看看laravel的路由文档,因为文字不是很详细,门户是:

https://learnku.com/docs/lara.

顺便说一下,我个人选择了laravel作为php框架进行深入研究。laravel优雅的路由是我选择它的重要原因。

我先在这里写几条路线,大家会觉得:

route : get(' test/query users ',[' uses '='[email protected]']);route : POSt(' test/query users ',[' uses '='[email protected]']);route : get(' test/query users/{ id } ',[' uses '='[email protected]']);Route:match(['get ',' post'],' test/queryUsers ',[' uses '='[emailprotected]']);route : ANy(' test/query users ',[' uses '='[email protected]']);我们知道有两个众所周知的http请求:get和post。

A.我们依次分析一下以上路线,先看第一条,

route : get(' test/query users ',[' uses '='[email protected]']);获取模式请求在此路由中指定,路由是test/queryUsers,逻辑将转到TestController控制器的queryUsers方法

有两个名词:控制器和方法

注意: laravel是一个mvc框架。为了理解mvc,你需要自己检查一些信息。

询问

控制器位于项目的App/Http/Controllers目录中。这里我添加了一个测试控制器控制器,并且在测试控制器中添加了一个查询器方法:

?phpnamespace App \ Http \ Controllers;使用app \成员;使用照明\支持\立面\数据库;使用符号\组件\路由\注释\路由;类TestController扩展了Controller { public function query users(){ $ users=db : table(' user ')-get();返回$ users}}我们先来看看结果。在地址栏中键入(域名路由): http://test.lara.com/test/queryUsers :

代码中很亮的一行是:

db : table(' user ')-get();这一行代码表示查询商店数据库的用户表中的所有数据,因此我们可以看到用户表中的所有三条记录都已返回。

B.现在我们来分析一下上面路线的第二个:

route : POSt(' test/query users ',[' uses '='[email protected]']);这条路线和第一条路线只有一个差价。是的,这是一个发布请求路线。我们知道post请求模式无法在浏览器地址栏中键入路由来得到结果,所以我们需要使用一个工具Postman,这是一件好事。如果有的同学不使用或者不知道,建议查一下,熟悉一下。

现在我们在Postman中创建新的请求,如图:所示

我们点击发送获得:

纳尼?为什么没有得到预期的结果?显然有些不对劲。让我们看看路由文件:

https://learnku.com/docs/lara.

在文档中,我寻找与帖子词相关的线索,看到了:

原来是CSRF造成的。前端学生和后端学生都应该熟悉这个词,并且跨站点请求伪造

为了解决拉弗尔的CSRF隐患,默认有一个保护机制。我们需要配置CSRF白名单。根据文档,我们知道CSRF白名单是在VerifyCsrfToken中间件中配置的,VerifyCsrfToken中间件的路径是3360

app/Http/Middleware/verifycsrftoken . PHP

打开文件,添加CSRF白名单,

受保护的$ except=[' http://test . Lara.com/test/query users ',];完成这一步后,我们将再次打开postman,点击send,看到数据如预期返回:

C.现在我们来分析一下上述路线的第三条:

route : get(' test/query users/{ id } ',[' uses '='[email protected]']);可以看出,这条路线的区别在于路线末端的{id}。在开发中,我们会有这样一个要求,前端传递一个用户id,后端返回与这个id对应的用户信息

此时,需要修改TestController queryUsers方法:

公共函数query users(){ $ id=request()-id;//以这种方式获取参数$ users=db : table(' user ')-其中(' id ',$ id)-get();返回JSON _ encode($ users);}用通俗的语言解释sql:查询表中id=$id(通过路由传递的值)的记录。

检查结果,果然:

D.现在我们来分析一下上述路线:的第四条和第五条

Route:match(['get ',' post'],' test/queryUsers ',[' uses '='[emailprotected]']);route : ANy(' test/query users ',[' uses '='[email protected]']);这两条路线我就不演示了。分别解释。匹配中的路由是指定的请求模式,一个或多个。

任何方式都可以匹配,无论我们是通过get还是post请求,都可以得到想要的结果。

来看看我上面设计的商品表

我们可以看到这两个数据不知道谁创建了用户,但是它们有uid值。这个时候,我们希望一个界面不仅能返回商品信息,还能让我知道是谁创建的。这时,我们需要使用多表联查。我们增加了一条路线:

route : get(' test/queryGoods ',[' uses '='[email protected]']);然后在TestController中添加一个queryGoods方法:

public function query goods(){ $ goods=db : table(' goods ')-left join(' 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: '陈云,昵称: '穷摇。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: '欧阳欣欣,昵称: '小欣欣head_url: null,age: null,gender: null,level: null }]但是用户信息所有字段全部被返回了,有些时候我们为了安全,只需要返回指定字段,比如我们只需要返回用户表中的真实姓名和标题URL(_ l)字段,那么我们就需要做一下字段的约束:

公共函数查询商品(){ $ goods=db :表格(' goods ')-左连接(' user ',' goods.uid ','=',' user . id ')-选择(' goods .*、“user.real_name”、“user”。head _ URL ')-get();返回JSON _ encode($ goods);}关注下这行代码:

选择('货物*、' user.real_name '、' user.head_url ')这行代码表示返回商品表中的所有字段以及用户表中的真实姓名和标题URL(_ l)字段,就完美达到了我们想要的结果。

新增

至此查询已经基本写的差不多了,我们开始向数据表里新增数据

我们新增一个邮政请求的路由测试/添加用户:

route : post(' test/addUser ',[' uses '='[email protected]']);添加跨站点请求伪造路由白名单

受保护的$ except=[' http://测试。劳拉。com/test/queryUsers ',' http://test。劳拉。com/test/addUser ',];然后测试控制器里新增一个添加用户方法:

公共函数addUSer(){ $ real _ name=request()-real _ name;$昵称=request()-昵称;db :表('用户')-插入([' real _ name '=$ real _ name,'昵称'=$昵称]);$ users=db :表(' user ')-get();返回JSON _ encode($ user);}打开邮递员,添加参数:

{'real_name': '刘亦菲,'昵称' : '小菲菲'}点击发送,发现数据如期望一样正确插入。

查询构造器提供插入方法用于插入记录到数据库中插入。方法接收数组形式的字段名和字段值进行插入操作

db :表('用户')-插入([' real _ name '=$ real _ name,'昵称'=$昵称]);编辑

我们新增一个放请求的路由测试/更新用户:

同样添加跨站点请求伪造

路由: put(' test/updateUser ',[' uses '='[email protected]']);路由白名单

受保护的$ except=[' http://测试。劳拉。com/test/query users ',' http://test。劳拉。com/test/addUser ',' http://测试。劳拉。com/test/updateUser ',];然后测试控制器里新增一个修改用户信息方法:

公共函数updateUser(){ $ id=request()-id;$昵称=request()-昵称;db :表('用户')-其中(' id ',$ id)-更新(['昵称'=$昵称]);$ users=db :表(' user ')-get();返回JSON _ encode($ user);}打开邮递员,我们知道刚刚新增的记录返回的刘亦菲的编号是4, 我们根据编号来更新下它的昵称,邮递员里添加请求参数:

{'id':'4 ',昵称' : '小阿菲~'}点击发送,发现数据如期望一样正确更新。

查询构造器提供更新方法用于更新已有的记录。接受包含要更新的字段及值的数组

-其中(' id ',$id) -更新(['昵称'=$昵称]);删除

我们新增一个删除请求的路由测试/删除用户:

route : delete(' test/delete user ',[' uses '='[email protected]']);

同样添加跨站点请求伪造路由白名单

受保护的$ except=[' http://测试。劳拉。com/test/queryUsers ',' http://test。劳拉。com/test/addUser ',' http://测试。劳拉。com/test/updateUser ',];

然后测试控制器里新增一个删除用户方法:

公共函数删除用户(){ $ id=request()-id;db :表('用户')-其中(' id ',$ id)-delete();$ users=db :表(' user ')-get();返回JSON _ encode($ user);}

打开邮递员,我们现在要删除数据库中刘亦菲的记录,我们知道她的id是4,我们根据id删除它并添加请求参数:

{'id':'4'}

单击“发送”发现数据已按预期正确删除(没有id为4的记录)。

laravel中的查询构造函数可以使用delete方法从表中删除记录。添加where子句来约束删除条件:

-其中(' id ',$ id)-delete();

有很多方法没有在文章中介绍。建议需要学习的同学看看文档,门户是:

https://learnku.com/docs/lara.

摘要

以上是边肖介绍利用Laravel中的查询构造函数实现查询的增删改功能。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!

版权声明:利用Laravel中的查询构造函数实现查询的添加、删除和修改功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐