laravel 数据库实现原理(laravel 数据迁移与 Eloquent ORM的实现方法)
laravel 数据库实现原理
laravel 数据迁移与 Eloquent ORM的实现方法导语
数据库可以说是后端开发最常用,也是最重要的部分。laravel 提供了很实用的 eloquent orm 模型类,简单、直观的与数据库进行交互。同时使用数据迁移管理数据库,可以与团队进行共享以及编辑。二者的更多介绍请查看下方的文档。
以下使用二者进行示例,需求是记录用户浏览记录。请勿将本示例带入实际项目中,本文仅作示例。实际项目根据需求进行记录,以及选择存储方式。
创建数据表
第一步当然是创建数据表了。使用 artisan
命令可以很方便的创建模型以及数据迁移。php artisan make:model models/browselog -m
,-m
参数在创建模型的同时也创建了数据迁移文件。执行过上述命令后,新增了 app/models/browselog.php
以及 database/migrations/{now_date}_create_browse_logs_table.php
两个文件。
接下来编辑 {now_date}_create_browse_logs_table.php
来创建数据表
|
/** * run the migrations. * * @return void */ public function up() { schema::create( 'browse_logs' , function (blueprint $table ) { $table ->increments( 'id' ); $table ->ipaddress( 'ip_addr' )->comment( 'ip 地址' ); $table ->string( 'request_url' , 20)->comment( '请求 url' ); $table ->char( 'city_name' , 10)->comment( '根据 ip 获取城市名称' ); $table ->timestamps(); }); db::statement( "alter table `browse_logs` comment'浏览记录表'" ); // 表注释 } |
代码如上,编辑完成后,执行命令 php artisan migrate
会将所有未执行迁移的数据表创建。如下
个人感觉,laravel 默认的数据类型值得商榷。例如 ipaddress()
,数据格式为 varchar(45)
,其实可以使用 ip2long
转换成 int
进行存储。timestamps()
也可以使用时间戳进行存储。当然 laravel 也提供了 访问器 & 修改器 方便维护。各位实际项目中自行选择。
定义中间件
定义一个全局中间件,每一次请求都会被执行。执行 php artisan make:middleware browselog
,创建了 app/http/middleware/browselog.php
文件。
将创建好的中间件添加到 app/http/kernel.php
中,如下
记录数据
最后在中间件中,记录数据到数据库即可,代码如下
|
/** * handle an incoming request. * * @param \illuminate\http\request $request * @param \closure $next * @return mixed */ public function handle( $request , closure $next ) { $log = new \app\models\browselog(); $log ->ip_addr = $request ->getclientip(); $log ->request_url = $request ->path(); $log ->city_name = get_city_by_ip(); $log ->save(); return $next ( $request ); } |
访问几个链接后,去数据库看下
数据写入正常,本次的示例就到此为止。
参考资料:数据库操作 —— 迁移、Eloquent ORM —— 快速入门。
原文链接:https://segmentfault.com/a/1190000017792631
- laravel 获取数据库操作异常(Laravel Eloquent ORM 多条件查询的例子)
- django自定义后台界面(Django csrf 两种方法设置form的实例)
- laravel 数据库实现原理(laravel 数据迁移与 Eloquent ORM的实现方法)
- django开发平台运用的技术(django的ORM模型的实现原理)
- css3伸缩布局教学(css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效)
- phpstorm代码模板(phpStorm+XDebug+chrome 配置详解)
- MVC中BeginForm
- 自制cssdiv导航栏(css利用transform skewX制作平行四边形导航菜单)
- 制作css3动画应使用哪个样式属性(CSS3中Transform动画属性用法详解)
- laravel框架学习心得教程(Laravel5.7 Eloquent ORM快速入门详解)
- mysql中date_format日期格式化
- html5的表单怎么写(HTML5新增form控件和表单属性实例代码详解)
- django删掉模型的字段(django中ORM模型常用的字段的使用方法)
- 麒麟安装教程(在麒麟V10服务器上编译安装Storm的详细过程)
- Request、Request.Form、Request.QueryString的区别
- php 处理html表单(PHP使用HTML5 FormData对象提交表单操作示例)
- 东南亚安全吗(好不好挣钱)
- 潘长江小品《照亮全家福》台词剧本完整版(潘长江小品照亮全家福台词剧本完整版)
- 一窗通办政务服务小品剧本(一窗通办政务服务小品剧本)
- 刘韬涛丁子贺小品《根治低头族》台词剧本(刘韬涛丁子贺小品根治低头族台词剧本)
- 看完《夺冠》,黄渤的演技我实在夸不起来,彭昱畅反令人惊喜(黄渤的演技我实在夸不起来)
- 黄渤泪目 我的痴呆父亲,我内心永远的痛(黄渤泪目我的痴呆父亲)
热门推荐
- SqlServer 表连接教程(问题解析)(SqlServer 表连接教程问题解析)
- python微信自动化(python微信撤回监测代码)
- python3循环使用教程(Python3.5常见内置方法参数用法实例详解)
- phparray函数的用法(php array_chunk函数用法与注意事项)
- pandas字典转化为dataframe(pandas修改DataFrame列名的实现方法)
- htaccess重定向详解设置(htaccess 将所有请求重定向到某个URL地址的规则)
- docker查看管理配置信息(Docker Secret的管理和使用详解)
- mysql存储过程声明(MySQL存储过程的深入讲解in、out、inout)
- vmware16虚拟机的安装教程(最新虚拟机VMware 14安装教程)
- select into from 和 insert into select 的用法和区别