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创建PDF中文文档
Oct 09 PHP
汉字转化为拼音(php版)
Oct 09 PHP
一个用php3编写的简单计数器
Oct 09 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
解析php中call_user_func_array的作用
Jun 07 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 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
图书管理程序(一)
2006/10/09 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
js加解密 脚本解密
2008/02/22 Javascript
prototype Element学习笔记(篇二)
2008/10/26 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
js实现小时钟效果
2020/03/25 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
工伤事故证明
2014/10/20 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
司机岗位职责
2015/02/04 职场文书
工作简报格式范文
2015/07/21 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
5个实用的JavaScript新特性
2022/06/16 Javascript