php - Laravel 工厂 : Manual Increment of Column

标签 php laravel laravel-5.4 laravel-seeding

对于以下工厂定义,order 列需要按顺序排列。已经有一个自动递增的 id 列。第一行的 order 应该从 1 开始,每一行的 order 应该是下一个数字 (1,2,3等)

$factory->define(App\AliasCommand::class, function (Faker\Generator $faker) {
    return [
        'user_id' => App\User::inRandomOrder()->first()->id,
        'command' => $faker->word,
        'content' => $faker->sentence,
        'order'   => (App\AliasCommand::count()) ?
            App\AliasCommand::orderBy('order', 'desc')->first()->order + 1 : 1
    ];
});

应该将 order 列设置为比上一行多 1,但是,它会导致所有行都被分配 1

最佳答案

这里有些东西可能有用。

$factory->define(App\AliasCommand::class, function (Faker\Generator $faker) {
    static $order = 1;   
    return [
        'user_id' => App\User::inRandomOrder()->first()->id,
        'command' => $faker->word,
        'content' => $faker->sentence,
        'order'   => $order++
    ];
});

它只是在该函数内部保留一个计数器。

更新:

Laravel 8 引入了新的工厂类,所以这个请求变成了:

class AliasCommandFactory extends Factory {

    private static $order = 1;

    protected $model = AliasCommand::class;

    public function definition() {
         $faker = $this->faker;
         return [
            'user_id' => User::inRandomOrder()->first()->id,
            'command' => $faker->word,
            'content' => $faker->sentence,
            'order'   => self::$order++
        ];
    }
}

关于php - Laravel 工厂 : Manual Increment of Column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44983693/

相关文章:

apache - apache ubuntu16.0.4上的ssl安装

php - 可疑操作异常 : Invalid Host error

php - 数据库继承 Laravel 5.4

php - 使用鼠标坐标查询图像数据库

php - 有了学说,我无法获得 Postgres 的正确序列名称

php - 在 Woocommerce 3 中删除订单项目后未保存重新计算的总计

php - 使用 Laravel Stripe 支付错误(您必须提供卡或客户 ID)

PHP 数组未设置

php - 拉维尔 5 : build URL with custom parameters

laravel - 下拉列表的基表