laravel 数据迁移与 Eloquent ORM的实现方法


Posted in PHP onApril 12, 2019

导语

数据库可以说是后端开发最常用,也是最重要的部分。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 数据迁移与 Eloquent ORM的实现方法

个人感觉,laravel 默认的数据类型值得商榷。例如 ipAddress(),数据格式为 varchar(45),其实可以使用 ip2long 转换成 int 进行存储。timestamps() 也可以使用时间戳进行存储。当然 laravel 也提供了 访问器 & 修改器 方便维护。各位实际项目中自行选择。

定义中间件

定义一个全局中间件,每一次请求都会被执行。执行 php artisan make:middleware BrowseLog,创建了 app/Http/Middleware/BrowseLog.php 文件。
将创建好的中间件添加到 app/Http/Kernel.php 中,如下

laravel 数据迁移与 Eloquent ORM的实现方法

记录数据

最后在中间件中,记录数据到数据库即可,代码如下

/**
  * 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);
 }

访问几个链接后,去数据库看下

laravel 数据迁移与 Eloquent ORM的实现方法

数据写入正常,本次的示例就到此为止。

参考资料:数据库操作 —— 迁移、Eloquent ORM —— 快速入门。

PHP 相关文章推荐
用PHP编程语言开发动态WAP页面
Oct 09 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
探讨:如何编写PHP扩展
Jun 13 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 #PHP
PHP中str_split()函数的用法讲解
Apr 11 #PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 #PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 #PHP
PHP生成随机码的思路与方法实例探索
Apr 11 #PHP
PHP实现网站应用微信登录功能详解
Apr 11 #PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 #PHP
You might like
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php静态文件生成类实例分析
2015/01/03 PHP
php链表用法实例分析
2015/07/09 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
Python try except finally资源回收的实现
2021/01/25 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
酒店应聘自荐信
2013/11/09 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
同意报考证明
2015/06/17 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书