美文网首页
Laravel 文档阅读:数据库之数据填充

Laravel 文档阅读:数据库之数据填充

作者: 晨曦入诗 | 来源:发表于2018-10-05 23:21 被阅读27次

    翻译、衍生自:https://laravel-china.org/docs/laravel/5.4/seeding

    简介


    种子类(Seed Class)保存在 database/seeds 目录。种子的命名,像 UsersTablesseeder 这样的约定(convention)方式。默认,已为你创建一个DatabaseSeeder 的类,在该类内部可以使用 call 方法调用其他种子类,控制种子类的执行顺序

    写种子


    一个种子类就是一个种子(Seeder)。使用 Artisan 命令:make seeder 创建种子,所有的种子保存在 database/seed;

    php artisan make:seederUsersTableSeeder;
    

    一个种子类默认包含一个方法: run 。这个方法在执行 Artisan 命令:db:seeder 是被调用。在 run 方法内部,定义向数据库插入数据的逻辑。您可以是那个使用查询语句构造器(Query Builder)手动插入数据或使用 Eloquent 模型工程方法(Eloquent model factories)。
    下面是使用查询语句构造器手动插入数据的例子:

    <?php
    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Modles;
    class DatabaseSeeder extends Seeder
    {
           //Run the databases seeds, @return void
        public function run()
         {
            DB::table('users')->insert([
            'name'  => str_random(10),
            'email` => str_random .'@gmail.com`, 
            'password` => becrypt(`secret`),
           ])->toArray();
         }
    }
    

    使用模型工厂

    有时,实用查询语句构造器手动插入数据会比较麻烦。如插入的数据量很大,这时就可以选择使用模型工厂法。首先,定义好模型工厂方法,接着就可以使用 factory 辅助方法向数据库插入数据。
    下面我们创建了50个用户并未每个用户伪造了一篇文章。

    <?php
      public function run(){
         factory(App\Models\user::class,50)->create()->each(function ($u)
        {
            $u->posts()->save(factory(App\Models\Post::class)->make());
        });
     }
    

    调用种子类
    已经说过,在 DatabaseSeeder 类内部使用 call 方法调用种子类。

    使用种子类的好处:可以将向数据库填充数据的逻辑拆分到多个文件里,从而避免将填充数据的逻辑统一写在一个文件里造成的文件过于巨大的问题。并且,你可以使用 call 方法、更加细粒度地、有选择地调用种子类,并控制种子类的执行顺序。

    下面是一个例子:

    public function run(){
         run[
            $this->call(UsersTableSeeder::class),
            $this->call(PosetTableSeeder::class),
            $this->call(CommenTableSeeder::class),  
        ];
    }
    

    执行种子

    一旦写好种子类,或者在 DatabaseSeeder 类中定义好了调用种子类的逻辑,就可以使用 Artisan 命令 db:seed 执行种子、向数据库填充数据了。

    Artisan 命令 db:seed 默认运行 DatabaseSeeder 类;当然也可以使用 --class 选项指定要运行的种子类。

    php artisan db:seed
    php artisan migrate:seed --class=UsersTableSeeder
    

    也可以在运行 migrate:refresh 命令时,通过指定 --seed 选项的方式填充数据。

    php artisan migrate:refresh --seed
    

    这个命令表示:还原 & 重新执行所有迁移,完成后再向数据库填充数据。

    相关文章

      网友评论

          本文标题:Laravel 文档阅读:数据库之数据填充

          本文链接:https://www.haomeiwen.com/subject/mnfcaftx.html