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反弹shell实现代码
Apr 22 PHP
discuz的php防止sql注入函数
Jan 17 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
php自定义类fsocket模拟post或get请求的方法
Jul 31 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 PHP
PHP 中常量的知识整理
Apr 14 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 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的五种设计模式
2012/09/05 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
js+html实现点名系统功能
2019/11/05 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
Python使用指定端口进行http请求的例子
2019/07/25 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
数据库专业英语
2012/11/30 面试题
拾金不昧的表扬信
2014/01/16 职场文书
满月酒主持词
2014/03/27 职场文书
新郎结婚保证书
2015/02/26 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA