Laravel 进阶笔记 4

seed可以开发测试环境添加假数据, 而migrate功能可以在生产环境填充真实, 或曰原始数据,

 $categories = [
            [
                'name'        => '分享',
                'description' => '分享创造,分享发现',
            ],
            [
                'name'        => '教程',
                'description' => '开发技巧、推荐扩展包等',
            ],
            [
                'name'        => '问答',
                'description' => '请保持友善,互帮互助',
            ],
            [
                'name'        => '公告',
                'description' => '站点公告',
            ],
        ];

        //这里发现可以直接操作数据库的东西了, 有点儿接近sql了.
        DB::table('categories')->insert($categories);

写在migrate的文件里面, up方法, 然后直接php artisan:migrate, 就能把旧的migrate自己完成了了, 有新的migrate, 就用

$ php artisan make:migration seed_categories_data

生成migrate文件.

代码生成器

啥? 机器人都会写代码了? 很有可能的事, 现在编程都傻瓜化了..

问题是, 如果快速写出符合代码规范的代码, 除了机器人, 还能有谁? 有个好东西叫summerblue/generator.

$ composer require "summerblue/generator:~1.0" --dev

--dev表示仅在开发环境使用.

首先, 整理一下需要新建的模型对象吧, 例如:

字段名称     描述     字段类型     加索引缘由     其他
title     帖子标题     字符串(String)     文章搜索     无
body     帖子内容     文本(text)     不需要     无
user_id     用户 ID     整数(int)     数据关联     unsigned()
category_id     分类 ID     整数(int)     数据关联     unsigned()
reply_count     回复数量     整数(int)     文章回复数量排序     unsigned(), default(0)
view_count     查看总数     整数(int)     文章查看数量排序     unsigned(), default(0)
last_reply_user_id     最后回复的用户 ID     整数(int)     数据关联     unsigned(), default(0)
order     可用来做排序使用     整数(int)     不需要     default(0)
excerpt     文章摘要,SEO 优化时使用     文本(text)     不需要     nullable()
slug     SEO 友好的 URI     字符串(String)     不需要     nullable()

只有下面一行, 就把view, controller, 数据库全搞定.

$ php artisan make:scaffold Topic --schema="title:string:index,body:text,user_id:integer:unsigned:index,category_id:integer:unsigned:index,reply_count:integer:unsigned:default(0),view_count:integer:unsigned:default(0),last_reply_user_id:integer:unsigned:default(0),order:integer:unsigned:default(0),excerpt:text:nullable,slug:string:nullable"

接着就是填充10个User跟100个Topics的假数据进去.方便测试分页功能.

填充数据需要4个文件:

1. 模型, 比如User.php 已经有了

2. 数据工厂, database/factories/UserFactory.php

数据工厂里面使用了一个以Faker作为输入的闭包, 这个闭包里面有假数据的产生方法, 由于要增加introduction字段的填充, 用Faker的sentence方法, 随机产生一些小文本, 作为instroduction即可

然后用命令产生数据填充文件:

$ php artisan make:seed UsersTableSeeder

3. 用户的数据填充, database/seeds/UsersTableSeeder.php

这个seed里面定义了要生成10个数据, 以及第一个数据要特殊化处理, 因为是管理员

4. 注册数据填充, database/seeds/DatabaseSeeder.php

理论上可以同时生成多种模型数据, 目前就先生成User先.

    public function run()
    {
         $this->call(UsersTableSeeder::class);
        //$this->call(TopicsTableSeeder::class);
    }

开始造假:

$ php artisan db:seed

接着topics的填充也是一样, 模型, 数据工厂, 填充规则, 调用四步四个文件.

然后重新填充即可:

$ php artisan migrate:refresh --seed

猜你喜欢

转载自www.cnblogs.com/Montauk/p/10197622.html