引言
上一篇介绍了如何在windows环境下跑一个 laravel
项目,这一篇写如何使用 laravel 中的 查询构造器
实现增删改查。
读这篇文章时我默认你已拥有如下知识:
- 了解php的基础语法
- 了解数据库设计
- 了解常用的sql查询
正文
实现增删改查前, 我们先准备一些步骤:
- php, nginx, mysql 服务正确启用
- 新建一个数据库及其数据表
开启服务我们打开上篇文章介绍的 Wnmp.exe
-> Start all
然后cmd上键入命令:
D:/wnmp/Wnmp/php/php-cgi.exe -b 127.0.0.1:9000 -c D:/wnmp/Wnmp/php/php.ini
新建一个数据库, 我命名为 shop
, 然后新建两张表
分别:
goods -> 商品表 user -> 用户表
数据表新建完成后, 我往里面随意插入了几条数据, 下图:
准备步骤已经完成, 我们打开上篇文章介绍的 testLaravel
项目
查看Laravel文档能够知道 数据库配置
在 config/database.php
里,
因为我们是mysql数据库, 所以找到对应的mysql选项:
查看 database.php
文件的mysql配置我们能够看到配置值是 变量
, 指向的是项目根目录的 .env
文件
打开 .env
文件, 我们填写对应的mysql真实配置, 下图:
配置大家看对应的key值就知道是什么含义了, 这里提下数据库密码, 为什么是 password
呢"htmlcode">
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
根据文件内容 我们知道了密码是: password
, 因为是本地开发环境 这里就不更改密码了,
但如果是生产环境, 大家使用集成环境包的时候一定要变更数据库密码.
另外文中没有介绍项目的具体目录结构, 建议大家看下官方文档, 熟悉一下.
到这里项目的数据库配置就已经配完了, 关联了本地的 shop
数据库.
现在我们需要配置一下 路由
, 所有的 Laravel 路由
的配置都在根目录的 routes
里, routes
目录中有4个路由配置文件, 这里不谈其中区别, 只关注 web.php
, 后面所有路由我们都在此文件里追加.
看到这里的同学也建议看一下 laravel 的路由文档, 因为文中讲的不是很细, 传送门:
https://learnku.com/docs/lara...
顺便一说, 我个人选择 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']);
我们知道熟知的http请求方式有 get
和 post
两种.
a. 我们来依次解析上面的路由, 先看第1条:
Route::get('test/queryUsers',['uses' => 'TestController@queryUsers']);
此路由指定了 get
方式请求, 路由为 test/queryUsers
, 逻辑会走向 TestController
控制器的 queryUsers
方法
这里出现了两个名词 控制器
和 方法
注: laravel是一个 mvc框架
, 关于 mvc
的理解需要自己查些资料看看.
查询
控制器在项目里的 App/Http/Controllers
目录里, 这里我新增一个 TestController
控制器, TestController
里新增一个 queryUsers
方法:
<"text-align: center">代码里很亮眼的一行:
DB::table('user')->get();这行代码表示查询 shop数据库
user
表的全部数据, 所以我们看到user
表中的3条记录都被返回了.b. 现在我们来解析上面路由的第2条:
Route::post('test/queryUsers',['uses' => 'TestController@queryUsers']);这条路由和第1条路由只有一个
post
的区别, 没错, 这是一个post请求的路由, 我们知道post请求方式无法在浏览器地址栏键入路由来得到结果, 所以我们需要使用一个工具Postman
, 这是个好东西, 如果有同学没用过或是不知道它, 建议查一下熟悉一下, 文中不介绍它.现在我们在
Postman
新建一个请求, 如图:我们点击
send
得到 :纳尼?怎么没有得到我们期望的结果, 很显然哪里不对,我们再来看看路由的文档:
https://learnku.com/docs/lara...
文档中我查找与
post
字眼的相关马迹, 看到:原来是
CSRF
造成的, 无论是前端同学还是后端同学, 应该都对这个词不陌生,跨站请求伪造
laravel 中为了解决
CSRF
这个隐患, 默认有保护机制, 我们需要配置CSRF 白名单
, 根据文档, 我们知道CSRF 白名单
的配置在VerifyCsrfToken
中间件里,VerifyCsrfToken
中间件所在路径:
App/Http/Middleware/VerifyCsrfToken.php
打开文件, 添加
CSRF 白名单
,protected $except = [ 'http://test.lara.com/test/queryUsers', ];完成这步后我们再打开 postman, 点击
send
可以看到数据如期望返回:c. 现在我们来解析上面路由的第3条:
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); }白话文解释一下这条sql: 在table表里查询id = $id(路由传递的值)的记录,
查看结果, 符合预期:
d. 现在我们来解析上面路由的第4条和第5条:
Route::match(['get','post'],'test/queryUsers',['uses' => 'TestController@queryUsers']); Route::any('test/queryUsers',['uses' => 'TestController@queryUsers']);这俩路由我就不演示了, 分别解释一下,
match
里路由为指定的请求方式, 一种或多种,而
any
则是匹配任意方式, 无论是通过get
还是post
方式请求, 都能得到我们想要的结果.我们再看看上面我设计的goods表
我们能看到这两条数据不知道创建的用户是谁, 但是有uid值, 这时候我们希望一个接口既返回商品信息又能够让我知道创建者是谁, 此时就需要用到多表联查了, 我们新增一个路由:
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')这行代码表示返回goods表中的
所有字段
以及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":"小菲菲"}点击send, 发现数据如期望一样正确插入.
查询构造器提供
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": "小阿菲~"}点击send, 发现数据如期望一样正确更新.
查询构造器提供
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"}
点击send, 发现数据如期望一样正确删除 (已经没有id为4的记录).
laravel中查询构造器可以使用
delete
方法从表中删除记录。添加where
子句来约束 delete 的条件:
->where('id', $id)->delete();
文章有很多方法没有介绍到, 建议需要学习的同学看下文档, 传送门:
https://learnku.com/docs/lara...
总结
以上所述是小编给大家介绍的使用Laravel中的查询构造器实现增删改查功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】