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 在文件指定行插入数据的代码
May 08 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
php学习笔记之面向对象
Nov 08 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
php技术实现加载字体并保存成图片
Jul 27 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
Laravel学习基础之migrate的使用教程
Oct 11 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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
php通过sort()函数给数组排序的方法
2015/03/18 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
深入理解Django的中间件middleware
2018/03/14 Python
Python中正则表达式的用法总结
2019/02/22 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
模具专业推荐信
2013/10/30 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
如何写好开幕词?
2019/06/24 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers