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 Mysql编程之高级技巧
Aug 27 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
基于MySQL体系结构的分析
May 02 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
YII2 全局异常处理深入讲解
Mar 24 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
重置版游戏视频
2020/04/09 魔兽争霸
PHP集成FCK的函数代码
2008/09/27 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
详解python之简单主机批量管理工具
2017/01/27 Python
Python切片工具pillow用法示例
2018/03/30 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
英语专业个人求职自荐信
2013/09/21 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
2014新年寄语
2014/01/20 职场文书
优秀护士演讲稿
2014/04/30 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
党员思想汇报材料
2014/12/19 职场文书
美术教师个人工作总结
2015/02/06 职场文书
预备党员党支部意见
2015/06/02 职场文书
python删除csv文件的行列
2021/04/06 Python
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript