75142913在线留言
【Laravel笔记】数据库的一些初始化操作(准备工作)_PHP技术_网络人

【Laravel笔记】数据库的一些初始化操作(准备工作)

Kwok 发表于:2022-04-05 20:05:19 点击:27 评论: 0

迁移就像是数据库的版本控制,让你的团队能够轻松地去定义和共享程序的数据库结构。迁移通常配合 Laravel 的结构生成器,可以轻松生成应用程序的数据库结构。如果团队中有成员在他的本地数据库环境中手动的添加了某个字段,那么你将会面对如何解决数据库迁移的问题。

一、数据迁移的基本操作

我们可以使用数据库迁移功能做一些非常有用的操作,下面我们以在平时项目开发中会使用到的系统设置存储表为例:

1、生成模型类

首先,我们应该创建一下Eloquent模型,使用Artisan命令可以快速的将模型文件生成在app/Models目录下。

php artisan make:model Setting
//使用 --migration或者-m参数可以同时生成数据库迁移文件

此命令会生成app/Models/Setting.php文件,

2、生成数据库迁移文件

通过下面的命令生成数据库的迁移文件,如果上面使用了-m或者--migration参数时,可以跳过此步骤:

php artisan make:migration create_settings_table
//生成 database/migrations/2022_04_05_103616_create_settings_table.php 迁移文件

3、使用数据库迁移文件功能创建数据表

打开上面的数据库迁移类文件(2022_04_05_103616_create_settings_table.php)可以看到里面包含了两个方法:up 和 down 。up 方法用于向数据库中添加新表、列或索引,而 down 方法用于撤销 up 方法执行的操作。然后使用Schema 构建器里的方法对表进行构建工作:

<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema; //使用Schema
use IlluminateSupportFacadesDB; //引用数据库操作类

return new class extends Migration
{
    //运行迁移
    public function up()
    {
        $tableName = Schema::create('settings', function (Blueprint $table) {
            global $tableName;
            $table->string('key', 64)->primary()->comment('设置的key'); //创建字段key并做为主键
            $table->text('value')->comment('设置内容'); //创建字段value类型为text,也可以使用longText、mediumText方法创建对应的类型
        });
        DB::statement("ALTER TABLE `" .  DB::getConfig('prefix') . "settings` comment '系统设置表'"); //表注释
    }

    //回滚迁移
    public function down()
    {
        Schema::dropIfExists('settings'); //删除表
    }
};

然后使用命令,将我们创建的迁移映射到数据库里:

php artisan migrate --env=local --path=./database/migrations/2022_04_05_103616_create_settings_table.php                                                            
//Migrating: 2022_04_05_103616_create_settings_table
//Migrated:  2022_04_05_103616_create_settings_table (91.31ms)

连接到数据库里,可以查看到我们已新建了一个表名为:settings的表,列名为key与value,类型与我们上面定义是一样的。

假如我们的迁移数据有问题可以使用下面的命令回滚迁移:

php artisan migrate:rollback

执行后我们的数据表:settings与migrations表里的迁移记录就被删除了。 

 4、模型的定义

在大多数情况下,我们都可以使用模型的默认配置,但有的表需要使用一些个性化的设置,这些提供了一些灵活的参数,我们的设置表刚好会使用到几项:

<?php

namespace App/Models;
use Illuminate/Database/Eloquent/Model;//引用Eloquent

class Setting extends Model
{
    //protected $table = 'settings';//指定表名字,默认情况下将以[模型名]+复数
    protected $primaryKey = 'key'; //使用key做为主键,默认情况下自动创建一个id做为主键
    public $incrementing = false; //不使用integer值的主键,默认为自增integer值
    protected $keyType = 'string'; //主健为String类型,默认为integer类型
    public $timestamps = false; //不主动维护时间戳,默认会自动创建 created_at 和 updated_at 列存在于模型对应的数据库表中。

    //如果你需要维护时间,但就不喜欢系统的字段名,可以使用下面的语法定义
    //const CREATED_AT = 'creation_date';//创建时间
    //const UPDATED_AT = 'updated_date';//更新时间
    //protected $dateFormat = 'U';//模型日期字段的存储格式。
    //protected $connection = 'sqlite';//默认使用的是应用程序配置的默认数据库连接。要自定义时修改此项

    //默认情况下,被实例化的模型不会包含任何属性值。如果想为模型的某些属性定义默认值,可以在模型上定义一个 $attributes 属性
    // protected $attributes = [ 'url' => 'https://www.meishiq.com'];
}

5、其它可能会用到的命令参考

在生成模型的同时,你可能还想要各种其他类型的类,例如模型工厂、数据填充和控制器。这些选项可以组合在一起从而一次创建多个类:

# 生成模型和 Flight工厂类...
php artisan make:model Flight --factory//参数简写-f

# 生成模型和 Flight 数据填充类...
php artisan make:model Flight --seed//参数简写-s


# 生成模型和 Flight 控制器类...
php artisan make:model Flight --controller//参数简写-c

# 生成模型,Flight 控制器类,资源类和表单验证类...
php artisan make:model Flight --controller --resource --requests//参数简写-crR

# 生成模型和 Flight 授权策略类...
php artisan make:model Flight --policy

# 生成模型和数据库迁移,Filght 工厂类,数据库填充类和 Flight 控制器...
php artisan make:model Flight -mfsc

# 快捷生成模型,数据库迁移,Flight 工厂类,数据库填充类,授权策略类,Flight 控制器和表单验证类...
php artisan make:model Flight --all

# 生成中间表模型...
php artisan make:model Member --pivot

 二、数据填充

上面我们已通过数据迁移功能创建好了数据表,现在我们需要在数据表写入一些基本的配置信息,在这里就需要数据填充功能了。

Laravel 内置了一个可为你的数据库填充测试数据的填充类。所有的填充类都放在 database/seeds 目录下。Laravel 默认定义了一个 DatabaseSeeder 类。通过这个类,你可以用 call 方法来运行其他的 seed 类,从而控制数据填充的顺序。

运行 Artisan 命令 make:seeder 可以生成 Seeder,框架生成的 seeders 都放在 database/seeders 目录下:

php artisan make:seeder SettingSeeder

Seeder 类只包含一个默认方法:run。这个方法会在执行 db:seed 这个 Artisan command 时被调用。在 run 方法里,你可以按需在数据库中插入数据。你也可以用 构造查询器 或 Eloquent 模型工厂 来手动插入数据。

如下所示,在默认的 DatabaseSeeder 类中的 run 方法中添加一条数据插入语句:

<?php

namespace DatabaseSeeders;

use IlluminateDatabaseConsoleSeedsWithoutModelEvents;
use IlluminateDatabaseSeeder;
use IlluminateSupportFacadesDB;

class SettingSeeder extends Seeder
{
    //批量写入初始化系统设置参数
    public function run()
    {
        DB::table('settings')->insert([
            ['key' => 'allowcache', 'value' => '1'], //是否开启缓存
            ['key' => 'allowregister', 'value' => '1'], //是否允许注册
            ['key' => 'attachmentdirtype', 'value' => 'month'], //附件归档
            ['key' => 'gzipcompress', 'value' => '0'], //开启Gzip
            ['key' => 'mobileurl', 'value' => 'http://m.55mx.com'], //手机版地址
            ['key' => 'sitename', 'value' => '网络人'], //网站名
            ['key' => 'siteurl', 'value' => 'http://www.55mx.com'], //网站地址
            //其它项设置....
        ]);
    }
}

然后使用命令运行Seeders:

php artisan db:seed//执行所有的seeder

php artisan db:seed --class=SettingSeeder//指定要执行的类

 

除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/209
标签:数据库数据填充Kwok最后编辑于:2022-04-05 21:05:46
0
感谢打赏!

《【Laravel笔记】数据库的一些初始化操作(准备工作)》的网友评论(0)

本站推荐阅读

热门点击文章