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更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 PHP
php生成短网址/短链接原理和用法实例分析
May 29 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
php中yii框架实例用法
2020/12/22 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
js Calender控件使用详解
2015/01/05 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
python文件操作之目录遍历实例分析
2015/05/20 Python
手把手教你python实现SVM算法
2017/12/27 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
大学活动总结范文
2014/04/29 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
项目建议书范文
2014/05/12 职场文书
技术比武方案
2014/05/19 职场文书
煤矿安全协议书
2014/08/20 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
财政局长个人总结
2015/03/04 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
Python爬取某拍短视频
2021/06/11 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android