laravel 数据迁移与 Eloquent ORM的实现方法

导语

数据库可以说是后端开发最常用,也是最重要的部分。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 默认的数据类型值得商榷。例如 ipAddress(),数据格式为 varchar(45),其实可以使用 ip2long 转换成 int 进行存储。timestamps() 也可以使用时间戳进行存储。当然 laravel 也提供了 访问器 & 修改器 方便维护。各位实际项目中自行选择。

定义中间件

定义一个全局中间件,每一次请求都会被执行。执行 php artisan make:middleware BrowseLog,创建了 app/Http/Middleware/BrowseLog.php 文件。
将创建好的中间件添加到 app/Http/Kernel.php 中,如下

记录数据

最后在中间件中,记录数据到数据库即可,代码如下

/**
  * 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);
 }

访问几个链接后,去数据库看下

数据写入正常,本次的示例就到此为止。

参考资料:数据库操作 —— 迁移、Eloquent ORM —— 快速入门。

(0)

相关推荐

  • Laravel 5框架学习之数据库迁移(Migrations)

    database migrations 是laravel最强大的功能之一.数据库迁移可以理解为数据库的版本控制器. 在 database/migrations 目录中包含两个迁移文件,一个建立用户表,一个用于用户密码重置. 在迁移文件中,up 方法用于创建数据表,down方法用于回滚,也就是删除数据表. 执行数据库迁移 复制代码 代码如下: php artisan migrate #输出 Migration table created successfully. Migrated: 2014_1

  • Laravel中数据迁移与数据填充的详细步骤

    前言 这是一篇基础教程,对标 Laravel 文档中的数据迁移和数据填充,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍把. 关于Laravel数据库迁移的理解 最初看到laravel框架中迁移的时候,会以为这个迁移是把数据从一个数据库中迁到另一个数据库中,又或者是从一个服务器迁移到另一个服务器中.我自己学习有一个学习方法叫做顾名思义,所以所述是我的第一反应,但是学了以后发现这个迁移不是我理解中的迁移,但又不知道为什么叫做迁移,所以去百科查了一下. 迁移是指已经获得的知识.技能,甚

  • Laravel 5框架学习之Eloquent (laravel 的ORM)

    我们来生成第一个模型 复制代码 代码如下: php artisan make:model Article #输出 Model created successfully. Created Migration: 2015_03_28_062517_create_articles_table 查看一下生成的文件 app/Article.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Article exten

  • Laravel 的数据库迁移的方法

    本文介绍了Laravel 的数据库迁移的方法,分享给大家,具体如下: 生成迁移 --table 和 --create 选项可用来指定数据表的名称,或是该迁移被执行时会创建的新数据表.这些选项需在预生成迁移文件时填入指定的数据表: php artisan make:migration create_users_table php artisan make:migration create_users_table --create=users php artisan make:migration a

  • Laravel实现数据库迁移与支持中文的填充

    前言 数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式直接修改,但是这么做有些弊端,比如在开发阶段,你自己的库表修改了,还要把这句sql语句传给别人再执行一遍,这在多人协同开发时不是一种好的方式.那有没有一种方式能让我们对数据库 库表的修改做一些简单的版本控制,同时能让其他人很方便的同步我们对数据库的修改呢? 答案是我们可以使用Laravel 内

  • laravel 数据迁移与 Eloquent ORM的实现方法

    导语 数据库可以说是后端开发最常用,也是最重要的部分.laravel 提供了很实用的 Eloquent ORM 模型类,简单.直观的与数据库进行交互.同时使用数据迁移管理数据库,可以与团队进行共享以及编辑.二者的更多介绍请查看下方的文档. 以下使用二者进行示例,需求是记录用户浏览记录.请勿将本示例带入实际项目中,本文仅作示例.实际项目根据需求进行记录,以及选择存储方式. 创建数据表 第一步当然是创建数据表了.使用 artisan 命令可以很方便的创建模型以及数据迁移.php artisan ma

  • laravel 解决Eloquent ORM的save方法无法插入数据的问题

    学习laravel中: 今天在测试使用Eloquent ORM将数据使用 save()方法插入到mysql中时,出现了错误,如图所示: 在网上查阅资料后找到了原因: 使用save方法新增数据: laravel会默认维护 created_at , updated_at 两个字段,这两个字段都是存储时间戳,整型11位的,因此使用时需要在数据库添加这两个字段.如果不需要这个功能,只需要在模型里加一个属性:public $timestamps=false; 以及一个方法,可以将当前时间戳存到数据库 pr

  • oracle数据迁移到db2数据库的实现方法(分享)

    1.表结构迁移 在plsql中选择表----->dbmsMetadata----->ddl 注意:这时表的创建.约束等信息将会显示在窗口中.可以将创建表的语句直接拷贝值sqldbx(连接db2数据库的工具)中修改字段的类型,如varchar2转化为varchar,number转化为integer.还有primary key.unique的变化. 2.表数据迁移 在Plsql中选择表------>右键------>qurey data(显示出所有数据)---->选择需要迁移的数

  • 执行Django数据迁移时报 1091错误及解决方法

    问题描述 今天在Pycharm 中的Terminal下,执行数据迁移操作时,第一步: Python manage.py makemigrations ,是没有任何问题,但就是在执行真正的数据迁移时,也就是第二步:Python manage.py migrate 时,报错,错误截图如下 大概的意思就是   错误代码1091,原因是  "无法删除'dt_id':请检查列/键是否存在". 问题的解决 分析: 可能是数据库中的字段结构,已经完成了对此字段的修改,但是在执行数据迁移的时候,生成的

  • laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

    本文实例讲述了laravel框架数据库操作.查询构建器.Eloquent ORM操作.分享给大家供大家参考,具体如下: 1.连接数据库 laravel连接数据库的配置文件位于config/database.php中,在其中connection字段中包含laravel所支持的数据库的配置信息,可以看到其中有主机.端口.数据库.用户名.密码等信息: 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'),

  • Laravel5.7 Eloquent ORM快速入门详解

    简介 Laravel 内置的 Eloquent ORM 提供了一个美观.简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的模型(Model),通过模型类,你可以对数据表进行查询.插入.更新.删除等操作. 在开始之前,确保在 config/database.php 文件中配置好了数据库连接.更多关于数据库配置的信息,请查看文档. 定义模型 我们从创建一个 Eloquent 模型开始,模型类通常位于 app 目录下,你也可以将其放在其他可以被 compose

  • Laravel框架Eloquent ORM修改数据操作示例

    本文实例讲述了Laravel框架Eloquent ORM修改数据操作.分享给大家供大家参考,具体如下: 这篇文章主要讲述两个知识点 通过模型更新 结合查询语句批量更新 NO.1模型更新 在更新之前我先让你们看一下我的数据库 里面共有四条数据,好,那么我们先使用模型更新,更新我的第四条数据,代码如下: namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class StudentCo

  • Laravel框架Eloquent ORM删除数据操作示例

    本文实例讲述了Laravel框架Eloquent ORM删除数据操作.分享给大家供大家参考,具体如下: 这篇文章,以下三个知识点希望大家能够掌握 如下: 通过模型删除 通过主键值删除 通过指定条件删除 NO.1模型删除 老样子,我们先新建一个方法,然后输入代码. namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class StudentController extends Co

  • Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解

    本文实例讲述了Laravel框架Eloquent ORM简介.模型建立及查询数据操作.分享给大家供大家参考,具体如下: 注:以下知识点可能有不全面之处,望见谅 NO.1Eloquent ORM简介 Laravel所自带的Eloquent ORM是一个优美.简洁的ActiveRecord实现,用来实现数据库操作 每个数据表都有与之相对应的"模型(Model)"用于和数据交互 NO.2模型的建立 最基础的模型代码如下: namespace App; use Illuminate\Datab

  • Laravel框架Eloquent ORM新增数据、自定义时间戳及批量赋值用法详解

    本文实例讲述了Laravel框架Eloquent ORM新增数据.自定义时间戳及批量赋值用法.分享给大家供大家参考,具体如下: 好了,这篇文章我们主要掌握以下几个知识点 通过模型新增数据(涉及到自定义时间戳) 使用模型的Create方法新增数据(涉及到批量赋值) NO.1通过模型新增数据 我的数据库和上篇文章结尾的数据库样式是一致的,那么我要想在这里面输入一个名字叫做ChenChai,年龄是为17岁.要如何操作呢? 代码如下: namespace App\Http\Controllers; us

随机推荐