美文网首页
laravel 模型工厂 简单使用

laravel 模型工厂 简单使用

作者: 高校邦MOOC | 来源:发表于2017-07-11 10:39 被阅读290次

    Laravel 使用填充类和测试数据提供了一个简单方法来填充数据到数据库。所有的填充类都位于 database/seeds目录。
    填充类的类名完全由你自定义,但最好还是遵循一定的规则,比如可读性,例如 UserTableSeeder等等。安装完 Laravel 后,会默认提供一个DatabaseSeeder类。从这个类中,你可以使用 call方法来运行其他填充类,从而允许你控制填充顺序。


    定义模型工厂
    先在 database/factories/ModelFactory.php 文件中定义一个工厂:

    $factory->define(App\Test::class, function (Faker\Generator $faker) {
    
        return [
            'name' => $faker->name,
            'airline' => $faker->unique()->randomNumber(),
            'description' => $faker->text(),
        ];
    });
    

    闭包内为工厂的定义,你可以返回模型中所有属性的默认测试值。在该闭包内会接收到 Faker PHP 函数库的实例,它可以让你很方便的生成各种随机数据以进行测试。
    当然,你也可以随意将自己额外的工厂增加至 ModelFactory.php文件。你也可以在 database/factories里为每一个数据模型创建对应的工厂模型类,如 UserFactory.php和 CommentFactory.php。 在 factories目录中的文件都会被 Laravel 自动加载。
    使用模型工厂
    Laravel 安装时自带的 DatabaseSeeder 类,有添加一个数据库插入语句到 run 方法

    <?php
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            // $this->call(UsersTableSeeder::class);
            factory(App\Test::class,5)->create();
        }
    }
    

    然后运行命令

    php artisan migrate:refresh --seed
    

    你也可以使用另一种方法单独填充数据
    生成一个填充器,可以通过 Artisan 命令 make:seeder。所有框架生成的填充器都位于 database/seeders目录:

    php artisan make:seeder TestTableSeeder
    

    在run方法下调用定义的工厂

    <?php
    
    use Illuminate\Database\Seeder;
    
    class TestTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            /*factory(App\Test::class, 50)->create()->each(function($test) {
                $test->posts()->save(factory(App\Test::class)->make());
            });*/
            factory(App\Test::class,3)->create();
        }
    }
    

    使用命令

    php artisan db:seed --class=TestTableSeeder
    

    模型关联#
    在本例中,我们还会增加关联至我们所创建的模型。当使用 create方法创建多个模型时,它会返回一个 Eloquent 集合实例,让你能够使用集合所提供的便利函数,像是 each:

    $users = factory(App\User::class, 3)
               ->create()
               ->each(function ($u) {
                    $u->posts()->save(factory(App\Post::class)->make());
                });
    

    你也可以使用闭包参数来创建模型关联。例如如果你想在创建一个 Post 的顺便创建一个 User 实例:

    $factory->define(App\Post::class, function ($faker) {
        return [
            'title' => $faker->title,
            'content' => $faker->paragraph,
            'user_id' => function () {
                return factory(App\User::class)->create()->id;
            }
        ];
    });
    

    相关文章

      网友评论

          本文标题:laravel 模型工厂 简单使用

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