Home
Nova Software
Nova SoftwareNova Software
  • 标准化 SaaS 产品

    • 诺怀云物业管理系统全场景智慧物业数字化方案
    • 诺怀云汽修管理系统汽修连锁业务全链路运营管理

    定制开发服务

    • 企业信息化系统定制
    • 移动 APP 开发
    • 微信 / 小程序开发
    • 电商系统
    • 企业官网建设
    SaaS 产品 + 软件定制双重能力

    匠心数字化服务

    SaaS 产品 + 软件定制双重能力

    成熟 SaaS 系统与软件定制开发,满足企业不同数字化需求

    new-arrownew-arrow
    数字化干货与案例分享

    行业洞察

    数字化干货与案例分享

    行业白皮书、项目案例解析、技术实践文章

    new-arrownew-arrow
  • 行业解决方案

    • 智慧物业
    • 智慧社区
    • 智慧园区
    • 智慧商业
    • 学校后勤
    • 医院后勤
    • 企事业后勤
    • 社区电商

    场景解决方案

    • 医院中央运送
    • 医院医废管理
    • 医院布草洗涤
    • 医院陪护管理
    • 设备管理
    • 维修工单管理
    • 保安巡更巡逻
    • 保洁管理
    • 物料管理
    • 场所租赁预约
    • 食堂管理
    • 考勤管理
    • 宿舍管理
    • 资产管理
    • 招商租赁管理
    • 收支管理
  • 客户案例
  • 公司介绍

    • 关于诺怀了解诺怀软件发展历程与企业概况
    • 我们的产品了解我们的产品框架
    • 新闻动态
    • 招贤纳士 加入我们,查看在招岗位
    • 选择诺怀我们的核心优势与服务特色
    • 联系我们商务咨询、技术对接与来访地址

    客户见证

    • 合作客户服务客户名录与行业覆盖
    • 客户评价来自合作企业真实客户心声

    合作模式

    • SaaS化标准系统开箱即用,快速落地
    • 定制开发模式你提需求我来实现,主打个性化
    • 数字化咨询服务业务诊断与数字化方案规划
试用申请
Home
重庆诺怀软件重庆诺怀软件

Menu

    • 诺怀云物业管理系统
    • 诺怀云汽修管理系统
    • 企业信息化系统定制
    • 移动 APP 开发
    • 微信 / 小程序开发
    • 电商系统
    • 企业官网建设
    • SaaS 产品 + 软件定制双重能力
    • 数字化干货与案例分享
    • 智慧物业
    • 智慧社区
    • 智慧园区
    • 智慧商业
    • 学校后勤
    • 医院后勤
    • 企事业后勤
    • 社区电商
    • 医院中央运送
    • 医院医废管理
    • 医院布草洗涤
    • 医院陪护管理
    • 设备管理
    • 维修工单管理
    • 保安巡更巡逻
    • 保洁管理
    • 物料管理
    • 场所租赁预约
    • 食堂管理
    • 考勤管理
    • 宿舍管理
    • 资产管理
    • 招商租赁管理
    • 收支管理
    • 关于诺怀
    • 我们的产品
    • 新闻动态
    • 招贤纳士
    • 选择诺怀
    • 联系我们
    • 合作客户
    • 客户评价
    • SaaS化标准系统
    • 定制开发模式
    • 数字化咨询服务

Laravel学习笔记(四)数据库迁移案例

Nova Software

2014-03-18
blog-details-cover

创建迁移

首先,让我们创建一个MySql数据库“Laravel_db”。接下来打开app/config目录下的database.php文件。请确保default键值是mysql:

1 return array( 2 ... 3 'default' => 'mysql',

然后输入你的数据库配置信息:

1 ... 2 'connections' => array( 3 'mysql' => array( 4 'driver' => 'mysql', 5 'host' => '127.0.0.1', 6 'database' => 'laravel_db', //数据库名 7 'username' => 'root, //你的数据库用户 8 'password' => 'Your_Database_Password', //数据库登录密码 9 'charset' => 'utf8', 10 'collation' => 'utf8_unicode_ci', 11 'prefix' => '', 12 ), 13 ...

我们要使用Laravel命令行工具artisan来创建我们新的迁移。要运行astisan需要打开一个终端,切换路径到Laravel引用程序文件夹的更目录。

第一个我们需要做的就是安装migrations表,这样Laravel就可以追踪哪些迁移已经运行了。下面的命令将会在数据库中创建一个特殊的表:

1 php artisan migrate:install

如下:

 

如果创建成功,artisan会返回“Migration table created successfully.”。

查看数据库,你会发现artisan确实创建了一个新表“migrations”。

你不需要过于关注这个表。这只是一个帮助Laravel监视迁移的表。当你添加新的迁移,artisan migrate会检查migrations表并执行那些没有运行的迁移。

现在,让我们创建一个实际的迁移文件。我想创建一个名为“author”的新表。让我们运行artisan migrate:make命令:

1 php artisan migrate:make create_authors_table

运行截图如下:

 

你会在app/database/migrations目录下看到文件2014_03_11_162133_create_authors_table.php。

正如你看到的,一个新的迁移文件名称中包含时间戳和迁移的描述性名称。

[注]注意细节的读者可能会注意到我们用“authors”问不是“author”命名作者表。这是Laravel设计理念的一方面,使用自然模型帮助我们存储数据模型。Laravel的表应该始终命名为你的数据模型的复数形式。对于Author模型,表就被命名为“authors”。如果你有一个模型Car,你需要命名表为“Cars”。另外,SELECT name FROM authors WHERE id=100 比 SELECT name FROM author WHERE id=100 更有意义。

迁移的解剖

迁移是Illuminate\Database\Migrations\MigrationLaravel 类的子类。您创建的类必须至少包含类的两个方法up()和down()。下面是生成由artisan的骨架迁移类:

1 <?php 2 use Illuminate\Database\Schema\Blueprint; 3 use Illuminate\Database\Migrations\Migration; 4 5 class CreateAuthorsTable extends Migration { 6 7 /** 8 * Run the migrations. 9 * 10 * @return void 11 */ 12 public function up() 13 { 14 // 15 } 16 17 /** 18 * Reverse the migrations. 19 * 20 * @return void 21 */ 22 public function down() 23 { 24 // 25 } 26 }

使用Laravel,我们可以在任何时间迁移到数据模型的特定版本。Up()方法中的代码执行向前迁移,down()执行反向迁移(创建数据库的新版本或者回滚到前一个版本)。

很容易想到up()执行迁移文件操作,down()是完全相反。就像word文档中的撤销命令——撤销所做的修改。例如,我们想创建一个“authors”表,在up()中创建,在down()中撤销。让我们看看应该怎么做。

Artisan migrate:make命令有一些可以加快你工作流的其他选项。让我们运行下面命令:

1 php artisan migrate:make create_authors_table --table authors --create

在上面的例子中,我们使用—table选项指定表名。另外,我添加了—create选项去告知artisan这个表需要被创建。如果我们打开迁移文件,你会发现artisan为我们生成了额外的样板文件代码:

1 <?php 2 use Illuminate\Database\Schema\Blueprint; 3 use Illuminate\Database\Migrations\Migration; 4 5 class CreateAuthorsTable extends Migration { 6 7 /** 8 * Run the migrations. 9 * 10 * @return void 11 */ 12 public function up() 13 { 14 Schema::table('authors', function(Blueprint $table) 15 { 16 // 17 }); 18 } 19 20 /** 21 * Reverse the migrations. 22 * 23 * @return void 24 */ 25 public function down() 26 { 27 Schema::table('authors', function(Blueprint $table) 28 { 29 // 30 }); 31 } 32 }

非常棒!现在,让我们做更加具体的工作。我们要使用的 Laravel Schema类来创建我们的"Authors"表。下面是创建作者表,并将必要的列添加到表的迁移代码:

1 public function up() 2 { 3 Schema::create('authors', function(Blueprint $table) 4 { 5 // auto increment id (primary key) 6 $table->increments('id'); 7 8 $table->string('name'); 9 $table->integer('age')->nullable(); 10 $table->boolean('active')->default(1); 11 $table->integer('role_id')->unsigned(); 12 $table->text('bio'); 13 14 // created_at, updated_at DATETIME 15 $table->timestamps(); 16 }); 17 }

我们调用Schema::create()方法创建一个新表“authors”。Schema::create()方法有两个参数:表名和一个闭包,闭包中包含了列定义。

闭包中,我们可以使用$table参数创建列。列定义方法的基本结构是:

1 $table->column_type(column_name)

列类型

在前面的示例中,我们指定的名称列的类型为"string"。但这是什么意思?数据库中通常没有”string”类型的列。

请记住,Laravel 试图使您的应用程序独立于底层的数据库;例如,如果你想,你可以使用 MySql 开发并部署到 Postgresql。如果您在迁移中使用 MySql 的列类型,应用到 Postgres 数据库可能无法工作。所以,Laravel 迁移通过使用通用的数据类型使你与底层的数据库类型系统隔离。如果我们要迁移 MySql 数据库, string()方法将创建VARCHAR(255)类型的列。在 Postgres,同一迁移可能会添加CHAR VARYING(255)类型的列 (虽然VARCHAR类型支持所有主要的数据库平台)。

Laravel 直接支持以下数据类型:

Laravel 方法

列的类型

increments($column)

向表中添加自动递增的主键

string($column)

添加一个VARCHAR(255)列

string($column, $length)

添加具有长度的VARCHAR

integer($column)

向表中添加一个INTEGER列,

float($column)

向表中添加一个FLOAT的列

decimal($column, $precision, $scale)

添加一个DECIMAL列的精度和小数位数。精度是总数中数字的位数。规模是小数点的右侧的位数。例如,数 123.45 具有精度为 5 和 2 的小数。从逻辑上讲,规模不能大于精度。

boolean($column)

向表中添加一个BOOLEAN的列。注意: 存储布尔值的方式而有所不同从一个数据库到另一个数据库。一些使用"1"和"0"的整数值来表示 true 和 false,个别的,其他人使用"T"和"F"等字符。Laravel 的"boolean"类型映射到数据库的所有系统上的small integer列。Laravel 很好的处理 PHP 的true与false之间的映射,所以你不需要担心。

text($column)

相当于表的TEXT

blob($column)

相当于表的BLOB

binary($column)

相当于表的BINARY

dateTime($column)

相当于表DATETIME

timestamp($column)

相当于表TIMESTAMP

date($column)

相当于表的DATE

time($column)

相当于表的TIME

enum($column, array $allowed)

在表上创建一个新的ENUM列

此外,还有几个你需要知道的扩展方法:

Laravel 方法

列的类型

timestamps()

timestamps()与timestamp()不同。它是一个 Laravel 用来管理创建和修改作为created_at和updated_at TIMESTAMP列的便利方法。他们是 Laravel 可以自己修改的两个特殊的数据库列。created_at列为仅当行被创建时当前时间戳。另一方面, updated_at被修改为每次操作的行的数据时当前时间戳。

nullable()

将指定列允许NULL值。默认情况下,Laravel 使在数据库级别需要通过添加NOT NULL约束的列。

default($value)

设置要用于新行作为初始值的列的默认值。你永远不需要显式设置的默认值为 null。不设置它默认值就为null。

unsigned()

设置INTEGER列为UNSIGNED。

参考资料:http://laravelbook.com/laravel-migrations-managing-databases/

作者更多博客:Bowen Huang

未完待续……

留言
诺怀软件

诺怀软件

Oct 26, 2026

诺怀软件自 2005 年投身软件开发领域,是国家高新技术、重庆市专精特新企业,积累了 20 多年行业数字化落地经验,自主研发的诺怀云物管平台获评重庆重点软件产品。我们服务全国大量物业、园区、医疗机构客户,以可追溯、透明化的数字化方案,帮助客户解决账目混乱、协同低效、监管难落地等痛点,赋能物业规范化运营,重建业主信任。欢迎留言,获取适配您项目的专属方案.

回复
预约咨询

获取定制开发解决方案

如果您也想了解软件定制开发、落地智慧物业、后勤数字化管理等,可预约顾问一对一沟通方案.

  • 20+开发经验

  • 30+全球区域客户

  • 15000+成功项目

footer-four-gradient
nova software logo

专注企业软件定制开发,提供物业、汽修等行业整体解决方案,助力企业业务数字化升级

抖音抖音
小红书小红书
微信服务号微信服务号
今日头条今日头条
搜狐号搜狐号
视频号视频号

关于诺怀

  • 公司介绍
  • 新闻动态
  • 客户案例
  • 联系我们
  • 常见问答

产品服务

  • 软件定制开发
  • 移动 APP 开发
  • 小程序定制开发
  • 物业SaaS系统
  • 汽修SaaS系统
  • 网站开发
  • 电商开发

案例及解决方案

  • 智慧物业解决方案合集
  • 汽修管理解决方案
  • 物业客户案例合集
  • 定制开发案例合集

咨询热线:4008310286

渝ICP备14000366号-1© 2026 重庆诺怀软件有限公司