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作的文本留言本的例子(五)
Oct 09 PHP
如何在PHP中使用Oracle数据库(3)
Oct 09 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
Aug 20 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
对PHP PDO的一些认识小结
Jan 23 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
Yii框架日志操作图文与实例详解
Sep 09 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 PHP
PHP7 错误处理机制修改
Mar 09 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
利用404错误页面实现UrlRewrite的实现代码
2008/08/20 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
JS中的作用域链
2017/03/01 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
python生成随机验证码(中文验证码)示例
2014/04/03 Python
python实现sublime3的less编译插件示例
2014/04/27 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
python实现电子产品商店
2019/02/26 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
pip安装python库的方法总结
2019/08/02 Python
python实现批量修改文件名
2020/03/23 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
简单的JAVA编程面试题
2013/03/19 面试题
小学优秀辅导员事迹材料
2014/05/11 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
优秀员工事迹材料
2014/12/20 职场文书
公司放假通知怎么写
2015/04/15 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书