Laravel - 上手实现 - 增删改查
程序员文章站
2022-05-17 09:04:34
前面已经了解到了 Laravel 的安装、访问、目录、路由等等。Laravel - 上手实现 - 增删改查。那么我们现在就去研究 Laravel 是如何实现 CURD 【增删改差】 操作的。 ......
拿到一个框架,除了解框架,还要能实现基本的curd操作。
添加
1、配置路由,指定添加页面;
// routes/web.php 中增加如下: // 添加页面、存放路径 laravel7/resources/views/users/add.blade.php // 视图文件默认以 .blade.php 结尾 route::get('/add', function(){ return view('users.add'); });
2、创建并编辑添加视图页面;
<!-- 视图文件存放路径 laravel7/resources/views/users/add.blade.php --> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>添加</title> </head> <body> <form action="regdo" method="post"> <div> <span>用户名</span> <span><input type="text" name="name" id=""></span> </div> <div> <span>密码</span> <span><input type="text" name="pwd" id=""></span> </div> <div> <span></span> <span><input type="submit" value="注册"></span> </div> <!-- 如果是通过 post 方式提交数据的化、需要增加 csrf 保护 --> <!-- 位置:官方手册 -> 基础功能 -> csrf保护 --> {{ csrf_field() }} </form> </body> </html>
3、配置路由绑定控制器和方法,用于执行添加操作;
// routes/web.php 中增加如下: // post 提交方式、视图层中 form 的 method // doadd 提交地址、视图层中 form 的 action route::post('/doadd', 'userscontroller@doadd');
4、在控制器接收数据,调用模型层执行添加操作;返回成功或者失败;
控制器中方法:
/** * 添加 * @param request * @return string */ public function create(request $request) { // 获取要提交的数据 $data['name'] = $request->input('name', ''); $data['pwd'] = $request->input('pwd', ''); // 调用模型层方法添加数据 $res = users::addone($data); // 判断是否添加成功 if (!$res) { // 注意: a 标签的 href 属性是指定的路由 return '添加失败!! 跳转至<a href="/add">添加页面</a>'; } return '添加成功!! 跳转至<a href="/show">展示页面</a>'; }
模型层中的方法:
// 注意: 模型层需要指定与模型关联的数据表名 // protected $table = 'users'; /** * 添加一条数据 * @param array $data * @return booler */ public static function addone($data) { return self::insert($data); }
展示
1、配置路由绑定控制器和方法,用于获取要展示的数据;
// routes/web.php 中增加如下: // 展示数据 route::get('/show', 'userscontroller@show');
2、在控制器中调用模型层执行查询操作,然后判断是否成功、成功则调用视图层展示数据 、失败则返回失败;
控制器中的方法:
/** * 展示 */ public function show() { // 调用模型层中的方法获取数据 $res = users::getall(); // 判断是否获取成功 if (!$res) { return '数据库暂时没有数据!!'; } // 成功、通过 view 方法发送数据到 视图文件 return view('users.show', ['res' => $res]); }
模型层中的方法:
/** * 获取所有的数据 * @return array */ public static function getall() { return self::get(); }
3、编辑视图层文件,通过 foreach 展示数据;
<!-- 视图文件存放路径 laravel7/resources/views/users/show.blade.php --> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>展示</title> </head> <body> <div> <span> 展示 </span> <span> <a href="/page">分页展示</a> </span> </div> <table> <tr> <td>id</td> <td>name</td> <td>pwd</td> <td>status</td> <td>last login</td> </tr> <!-- 手册:前端开发 -> blade 模版 -> 循环 --> @foreach ( $res as $v ) <tr> <td>{{ $v->id }}</td> <td>{{ $v->name }}</td> <td>{{ $v->pwd }}</td> <td>{{ $v->status }}</td> <td>{{ $v->last }}</td> </tr> @endforeach </table> </body> </html>
分页展示
1、配置路由绑定控制器和方法,用于获取要展示的数据;
// routes/web.php 中增加如下: // 展示数据 route::get('/page', 'userscontroller@page');
2、在控制器中调用模型层执行查询操作,然后判断是否成功,成功则调用视图层展示数据 ,失败则返回失败;
控制器中方法:
/** * 分页展示 */ public function page() { // 调用模型层中的方法获取数据 $res = users::page(); // 判断是否获取成功 if (!$res) { return '数据库暂时没有数据!!'; } // 成功、通过 view 方法发送数据到 视图文件 return view('users.page', ['res' => $res]); }
模型层中方法:
/** * 分页展示 * @return array */ public static function page() { // paginate 方法会自动根据用户正在查看的页面来设置限制和偏移量 // 5 是每页显示条数 return self::paginate(5); }
3、编辑视图层文件,通过 foreach 展示数据;
<!-- 视图文件存放路径 laravel7/resources/views/users/page.blade.php --> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>分页展示</title> <!-- laravel 框架默认的样式是 bootstrap、为了分页展示美化、所以引用 css 样式 --> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css"> </head> <body> <div> <span> 分页展示 </span> <span> <a href="/show">普通展示</a> </span> </div> <table class="table" style="text-align: center"> <tr> <td>id</td> <td>name</td> <td>pwd</td> <td>status</td> <td>last login</td> <td>action</td> </tr> <!-- 手册:前端开发 -> blade 模版 -> 循环 --> @foreach ( $res as $v ) <tr> <td>{{ $v->id }}</td> <td>{{ $v->name }}</td> <td>{{ $v->pwd }}</td> <td>{{ $v->status }}</td> <td>{{ $v->last }}</td> <td> <a href="upd?id={{ $v->id}}">修改</a> <a href="del?id={{ $v->id}}">删除</a> </td> </tr> @endforeach <tr> <td colspan="6"> <!-- 手册:数据库 -> 分页 -> 显示分页结果 --> {{ $res->links() }} </td> </tr> </table> </body> </html>
删除
1、在展示的视图文件中增加删除链接,指定删除的路由;
编辑展示的视图文件
// 视图文件中增加删除链接 // del 执行删除的路由 <a href="del?id={{ $v->id}}">删除</a>
编辑路由文件:
// 路由文件中增加如下删除路由 route::get('/del', 'userscontroller@del');
2、在控制器接收数据,调用模型执行删除操作,然后判断是否成功,成功则返回成功 ,失败则返回失败;
控制器中方法:
/** * 删除 */ public function del(request $request) { // 接收数据 id $where['id'] = $request->input('id', 0 ); // 调用模型层中的删除方法 $res = users::del($where); // 判断执行结果 if (!$res) { return '删除失败!! 跳转至<a href="/page">展示页面</a>'; } return '删除成功!! 跳转至<a href="/page">展示页面</a>'; }
模型层中方法:
/** * 删除 * @param array $where * @return booler */ public static function del($where) { return self::where($where)->delete(); }
修改
1、在展示的视图文件中增加修改链接,指定获取要修改的数据的路由;
编辑展示的视图文件
// 视图文件中增加修改链接 // upd 执行修改的路由 <a href="upd?id={{ $v->id}}">修改</a>
编辑路由文件:
// 路由文件中增加如下删除路由 route::get('/upd', 'userscontroller@upd');
2、在控制器接收数据,调用模型获取数据,然后发送数据到视图文件;
控制器中方法:
/** * 获取要进行修改的数据 */ public function upd(request $request) { // 接收数据 id $where['id'] = $request->input('id', 0); // 调用模型层中的获取一条数据的方法 $res = users::getone($where); // 判断执行结果 if (!$res) { return '数据获取失败!! 跳转至<a href="/page">展示页面</a>'; } // 成功、通过 view 方法发送数据到 视图文件 return view('users.upd', ['res' => $res]); }
模型层中方法:
/** * 查询一条数据 * @param array $where * @return array */ public static function getone($where) { // return self::where( $where )->first(); return self::firstwhere($where); }
3、将发送来的的数据展示到修改页面;
<!-- 视图文件存放路径 laravel7/resources/views/users/upd.blade.php --> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>修改</title> </head> <body> <form action="doupd" method="post"> <div> <span>用户名</span> <span><input type="text" name="name" id="" value="{{ $res->name }}"></span> </div> <div> <span>密码</span> <span><input type="text" name="pwd" id="" value="{{ $res->pwd }}"></span> </div> <div> <span><input type="hidden" name="id" value="{{ $res->id }}"></span> <span><input type="submit" value="修改"></span> </div> <!-- 位置:官方手册 -> 基础功能 -> csrf保护 --> {{ csrf_field() }} </form> </body> </html>
4、配置路由绑定控制器和方法,用于执行修改操作;
// 执行修改 // post 提交方式、视图层中 form 的 method // doupd 提交地址、视图层中 form 的 action route::post('/doupd', 'userscontroller@doupd' );
5、在控制器接收数据,调用模型执行修改操作,然后判断是否成功,成功则返回成功 ,失败则返回失败;
控制器中方法:
/** * 执行修改 */ public function doupd(request $request) { // 接收数据 id 作为修改的条件 $where['id'] = $request->input('id', 0); // 接收其他数据 作为要修改的数据 $data['name'] = $request->input( 'name', '' ); $data['pwd'] = $request->input( 'pwd', '' ); // 调用模型层中的修改方法 $res = users::upd( $where, $data ); // 判断执行结果 if (!$res) { return '修改失败!! 跳转至<a href="/page">展示页面</a>'; } return '修改成功!! 跳转至<a href="/page">展示页面</a>'; }
模型层中方法:
/** * 修改 * @param array $where * @param array $data * @return booler */ public static function upd($where, $data) { return self::where($where)->update($data); }
常见错误
1、symfony \ component \ httpkernel \ exception \ methodnotallowedhttpexception no message
具体截图:
解决:查看路由的请求方式和提交请求的方式是否一致。
2、illuminate \ database \ queryexception (42s02)
具体截图:
解决:查看模型层是否指定与模型关联的数据表
推荐阅读