最适合入门的Laravel初级教程(八)数据库填充Seeding

数据表有了;
咱可以进行一些数据库操作了;
先创建演示的控制器;

php artisan make:controller DatabaseController

创建路由;

Route::prefix('database')->group(function () {
    Route::get('insert', 'DatabaseController@insert');
});

控制器中增加 insert 方法;

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;

class DatabaseController extends Controller
{
    public function insert()
    {
        DB::insert('INSERT INTO articles (category_id,title,content) VALUES (1,"文章1","内容1")');
    }
}

我们看到了有个 use DB;
表示使用了 DB 类;
为啥可以直接use DB 咱先暂且不讲;
就当是固定用法;
过后开个中级教程的时候详解;
DB 类就是我们操作数据库的关键;
Db 类有个 insert 方法;
它可以直接传插入内容的 sql 语句;
我们访问下 /database/insert
这样数据就插入成功了;

确实是很简单吧;
但是并不会提倡这种拼接字符串的方式来添加数据;
维护起来麻烦不说还不安全;
所以我们可以换种方式;
DB 还有个 table 方法可以传表名;
再调用 insert 方法可以传要插入的数组;
改造后就成这个样子了;

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;

class DatabaseController extends Controller
{
    public function insert()
    {
        DB::table('articles')->insert([
            [
                'category_id' => 2,
                'title' => '文章2',
                'content' => '内容2'
            ],
            [
                'category_id' => 3,
                'title' => '文章3',
                'content' => '内容3'
            ],
        ]);
    }
}

我们再访问下 /database/insert 查看数据库;

使用 DB 插入数据的方式学会后我们就可以讲点填充了;

以前我们下载别人的开源程序使用的时候;
比如说我的 thinkphp 博客 thinkphp-bjyblog;
如果没有一个安装引导;
我们第一件事就是找 sql 文件在哪;
使用了 laravel 后就可以彻底告别找 sql 文件的历史了;
又比如说我的 laravel 博客 laravel-bjyblog
但是 sql 文件中一般不只是表结构;
一般还有一些初始化的数据;
咱上篇文章只讲了如何使用迁移创建表结构;
但是咱没数据啊;
我们刚刚讲过 DB 插入数据的方式;
但是那是在控制器中的;
这种创建路由创建控制器写填充的方式非常之不优雅;
当然的;laravel 又为我们准备了方法;
没错下面要讲的填充就是向数据库批量添加数据的;
简单来个公式;
迁移 + 填充 = sql;
这样就容易理解迁移和填充的作用了吧;

开始行动;
首先同样是命令行创建填充文件;

php artisan make:seeder ArticlesTableSeeder

这会生成一个 database/seeds/ArticlesTableSeeder.php 文件;

里面有个 run 方法;
利用 DB 的方法写上要填充的内容;

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    DB::table('articles')->insert(
        [

            [
                'category_id' => 4,
                'title' => '文章4',
                'content' => '内容4'
            ],
            [
                'category_id' => 5,
                'title' => '文章5',
                'content' => '内容5'
            ]
        ]
    );
}

填充文件就算创建完成了;
和迁移样先创建好文件写好内容;
接着就是要运行填充了;

php artisan  db:seed

然后你会发现毛都没有提示;
这是因为填充比迁移多一个步骤;
我们会发现 database/seeds 目录下还有个 DatabaseSeeder.php 文件;
它默认就存在的;并不是我们创建的;
我们打开它;
它里面也有一个 run 方法;
我们可以看到里面注释了一个示例;
// $this->call(UsersTableSeeder::class);
说明这个默认的文件并像我们自己创建的填充文件一样写填充的内容的;
它是用来定义填充文件的执行顺序的;

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // $this->call(UsersTableSeeder::class);
        $this->call(ArticlesTableSeeder::class);
    }

我们会创建很多填充文件;
因为如果有外键的话;
执行顺序不对是会报错的;
所以需要严格的自己指定顺序;
ok;再来执行一遍填充命令;

相比于迁移;
填充就的价值就没有那么革命性了;
而且填充更强大的功能需要模型的支持;
我们还没讲到;
此处留个坑;
等讲模型的时候再填;

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共10条评论
白俊遥博客

愤青也任性:愁

2018-05-22 10:21:39 回复

白俊遥博客

陈大人:请问为何我在项目里写进数据库包含中文的数据全部变成“???”,我的数据库设置和您的一样:CHARSET=utf8mb4  COLLATE=utf8mb4_unicode_ci

2018-02-24 15:00:15 回复

白俊遥博客 白俊遥博客
  • 云淡风晴 回复 陈大人:那就是数据库编码的问题了;网上搜下mysql编码;很多解决方案;
  • 2018-03-04 22:33:46 回复
白俊遥博客

陈大人:"又比如说我的 laravel 博客 thinkphp-bjyblog" 这里项目名好像写错了

2018-02-24 14:49:07 回复

白俊遥博客 白俊遥博客
  • 云淡风晴 回复 陈大人:多谢反馈;已修改;
  • 2018-03-04 22:33:54 回复
白俊遥博客

K:不错 学习了

2018-01-26 09:55:42 回复

白俊遥博客

保持微笑:大大 等更新

2018-01-24 11:34:41 回复

白俊遥博客
  • hiwangqi 回复 保持微笑:支持下很不错
  • 2018-01-24 20:22:02 回复
白俊遥博客 白俊遥博客
  • 云淡风晴 回复 保持微笑:更新了;
  • 2018-03-04 22:34:04 回复
白俊遥博客

YOU:$table->integer('category_id')->unsigned()->...可以设置无符号$table->boolean('category_id')->unsigned()->...tinyint设置无符号无效,大佬瞅瞅瞧

2018-01-22 19:52:28 回复

白俊遥博客 白俊遥博客
  • 云淡风晴 回复 YOU:我试了可以设置;你再测测?
  • 2018-03-04 22:39:26 回复
白俊遥博客

残岩飞雪:白大帅,请问能否导演一部vue的操作连续剧?

2018-01-22 17:31:52 回复

白俊遥博客 白俊遥博客
  • 云淡风晴 回复 残岩飞雪:这个可以有;等我把 laravel 系列搞完;可以构思构思;
  • 2018-03-04 22:40:07 回复
白俊遥博客

YOU:迁移文件中设置字段 无符号 无效$table->integer('category_id')->unsigned()->default(0)->comment('分类id');

2018-01-22 11:26:46 回复

白俊遥博客

像晚约:dc8c6ecf62925a9b8041d06a8a1943fd这是什么

2018-01-22 00:15:50 回复

白俊遥博客

YOU:看了数据迁移,感觉厉害的不要不要的白俊遥博客

2018-01-21 23:34:38 回复