美文网首页
Laravel 之 Seeders添加数据

Laravel 之 Seeders添加数据

作者: IT小池 | 来源:发表于2018-10-28 16:27 被阅读0次

    Laravel 可以用 seed 类轻松地为数据库填充测试数据。所有的 seed 类都存放在 database/seeds 目录下。你可以任意为 seed 类命名,但是应该遵守类似 UsersTableSeeder 的命名规范。Laravel 默认定义了一个 DatabaseSeeder 类。可以在这个类中使用 call 方法来运行其它的 seed 类来控制数据填充的顺序。

    注意 laravel常用函数文件 :
    1. vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
    2. vendor/laravel/framework/src/Illuminate/Support/helpers.php
    命令

    在laravel项目根目录下,执行如下:
    php artisan 查看所有命令
    php artisan help make:seeder 如:查看 Seeder 命令参数帮助

    1.创建Seeders

    可以通过运行 make:seeder [Artisan 命令]来生成一个 Seeder,如

    php artisan make:seeder UsersTableSeeder
    

    生成之后的文件存放在 database / seeds目录下。

    2.factories / ModelFactory模型工厂

    Faker是一个为您生成虚假数据的PHP库,Faker 官网:https://github.com/fzaninotto/Faker#populating-entities-using-an-orm-or-an-odm
    使用 database / factories / ModelFactory 目录下的 ModelFactory文件模型工厂 文件模型工厂生成随机数据,如:

    // 设置添加到数据库的随机数据
    $factory->define(App\Users::class, function (Faker\Generator $faker) {
        return [
            'title' => $faker->sentence(2),
            'content' => $faker->paragraph(10),
            'user_id' => floor(mt_rand())
        ];
    });
    

    其中 App\Users::class 的 Users 是模型。

    3.调用模型工厂

    在步骤1生成的 seeder 文件中,进行调用步骤2编写好模型工厂,如:

    public function run()
    {
        factory(App\Users::class,50)->create();
    }
    
    4.调用 Seed

    database / seeds 下的 DatabaseSeeder 类中调用编写好的 UsersTableSeeder,如:

    public function run()
    {
         $this->call(UersTableSeeder::class);
    }
    
    5.执行添加数据

    在项目根目录下,打开 cmd ,执行

    php artisan db:seed
    

    也可以用 --class 选项来单独运行一个特定的 seeder 类:

    php artisan db:seed --class=UsersTableSeeder
    

    不知道命令,可以查看本文开头的命令,执行一下,看到 Seeding: PostsTableSeeder ,就添加数据成功了。

    注意:

    描述一个问题:
    1.我先调用:
    php artisan make:seeder AdminUserTableSeeder
    2.生成一个 'AdminUserTableSeeder' 类,但是发现,应该命名为'AdminUsersTableSeeder',用户应该为复数。然后我就手动修改了文件&文件内部的类名。
    3.执行:
    php artisan db:seed
    直接报错:
    [ReflectionException] Class AdminUsersTableSeeder does not exist
    解决方法:
    composer dump-autoload或者,清除缓存 php artisan cache:clear / php artisan config:clear

    随即想到,php artisan 命名,可能生成了一些 composer 相关的缓存,去 'vendor/composer/' 发现了几个autoload_xx.php文件,这里就是 composer 自动加载的文件列表!也同 'composer.json' 中的 'autoload' 的配置,有很大关联

    相关文章

      网友评论

          本文标题:Laravel 之 Seeders添加数据

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