Laravel 5.3 Factory 新方法 state

JellyBool

JellyBool

在 Laravel 5.3 (具体版本是在 5.3.17 之后可以使用)的时候,Factory 模块新增了一个非常好用的方法 state(),这对于我们处理一些不同角色的时候非常有用,具体可以看下面的例子:

正常的,我们还是使用 define 来定义 factory:



$factory->define(App\User::class, function (Faker\Generator $faker) {

    return [

        'name' => $faker->name,

        'email' => $faker->unique()->safeEmail

    ];

});

然后比如我们中有 admin 和 member等。我们可以这样:

1.声明 admin 的 state:

$factory->state(App\User::class, 'admin', function (Faker\Generator $faker) {

    return [

        'is_admin' => 1

    ];

});

2.声明 member 的 state:

$factory->state(App\User::class,'member', function (Faker\Generator $faker) {

    return [

        'is_member' => 1

    ];

});

最后,我们就可以在 tinker 的 factory 中这样使用:

1.执行 admin 的 states:

factory(\App\User::class, 2)->states('admin')->make()

命令行输出结果:

=> Illuminate\Database\Eloquent\Collection {#704

     all: [

       App\User {#695

         name: "Vivian Renner",

         email: "[email protected]",

         is_admin: 1,

       },

       App\User {#694

         name: "Arden Macejkovic",

         email: "[email protected]",

         is_admin: 1,

       },

     ],

   }

2.执行 member 的 state :

factory(\App\User::class, 2)->states('member')->make()

命令行输出:

=> Illuminate\Database\Eloquent\Collection {#708

     all: [

       App\User {#699

         name: "Perry Feil",

         email: "[email protected]",

         is_member: 1,

       },

       App\User {#703

         name: "Mr. Dario Jerde",

         email: "[email protected]",

         is_member: 1,

       },

     ],

   }
本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 0 条评论