对于以下工厂定义,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/