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支持时的替代方案
Oct 09 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
PHP简单实现无限级分类的方法
May 13 PHP
php socket通信简单实现
Nov 18 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 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 strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
万能的php分页类
2017/07/06 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
VUE中使用MUI方法
2019/02/12 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
python实现井字棋游戏
2020/03/30 Python
使用Python生成XML的方法实例
2017/03/21 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
境外导游求职信
2014/02/27 职场文书
春风行动实施方案
2014/03/28 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
人民币符号
2022/02/17 杂记