工厂上的增量编号,Laravel
我有一家工厂被多次调用,但在工厂上的增量编号,Laravel,laravel,laravel-6,laravel-factory,Laravel,Laravel 6,Laravel Factory,我有一家工厂被多次调用,但在合同年列中,我得到了相同的值 $factory->define(ContractYear::class, function (Faker $faker) { $contract = Contract::orderByDesc('id')->first(); $contract_year = ContractYear::select('contract_year')->orderByDesc('id')->value('contr
合同年
列中,我得到了相同的值
$factory->define(ContractYear::class, function (Faker $faker) {
$contract = Contract::orderByDesc('id')->first();
$contract_year = ContractYear::select('contract_year')->orderByDesc('id')->value('contract_year');
if($contract_year == null){
$contract_year = 2019;
}
return [
'contract_id' => $contract->id,
'contract_year' => $contract_year++,
'licensed_users' => $faker->randomDigit,
];
});
我从这里叫它
$u->contracts()->saveMany(factory(Contract::class, rand(1, 5))->create()->each(function ($contract){
$contract->years()->saveMany(factory(ContractYear::class, $contract->number_of_years)->create());
}));
您可以使用
static
$factory->define(ContractYear::class, function (Faker $faker) {
static $contract_year;
$contract = Contract::orderByDesc('id')->first();
if(!$contract_year) {
$contract_year = ContractYear::select('contract_year')->orderByDesc('id')->value('contract_year') ?? 2019;
}
return [
'contract_id' => $contract->id,
'contract_year' => $contract_year++,
'licensed_users' => $faker->randomDigit,
];
});
参考资料:您可以使用
static
$factory->define(ContractYear::class, function (Faker $faker) {
static $contract_year;
$contract = Contract::orderByDesc('id')->first();
if(!$contract_year) {
$contract_year = ContractYear::select('contract_year')->orderByDesc('id')->value('contract_year') ?? 2019;
}
return [
'contract_id' => $contract->id,
'contract_year' => $contract_year++,
'licensed_users' => $faker->randomDigit,
];
});
参考资料:在
$this
$factory->define(ContractYear::class, function (Faker $faker) {
$this->sequences = $this->sequences ?? [];
$contract = Contract::orderByDesc('id')->first();
$group = $contract->id ?? 0;
$this->sequences[$group] = $this->sequences[$group] ?? 2019;
return [
'contract_id' => $contract->id,
'contract_year' => $this->sequences[$group]++,
'licensed_users' => $faker->randomDigit,
];
});
可能值得研究Laravel 8新模型工厂,以获得更明确的面向对象方法将计数器附加到
$this
$factory->define(ContractYear::class, function (Faker $faker) {
$this->sequences = $this->sequences ?? [];
$contract = Contract::orderByDesc('id')->first();
$group = $contract->id ?? 0;
$this->sequences[$group] = $this->sequences[$group] ?? 2019;
return [
'contract_id' => $contract->id,
'contract_year' => $this->sequences[$group]++,
'licensed_users' => $faker->randomDigit,
];
});
也许值得研究一下Laravel 8新模型工厂,以获得更明确的面向对象方法我尝试了这个方法,得到了“常量表达式包含无效操作”您只写了
静态
,而不是公共静态
对吗?此外,尝试放置静态$contract\u year=2019在$contrat=…
之前,删除=ContractYear::…
以查看此功能?我在我的一个项目中就有这个,它正在工作。是的,这样我就不会出错,但增量是针对每个合同的。因此,如果我有一份合同的4行,所有的都是(2019年,2019年…),在下一份合同中我得到(2020年…)等等。对同一份合同来说不是递增的。我已经提高了我的答案。这样试试。IRC正确声明变量属性时,您无法分配变量或函数结果。我没有收到任何错误,但增量是在每个协定上完成的,而不是在分配给协定的每一行上完成的,如上文所述。我尝试了此操作,得到了“常量表达式包含无效操作”,您只编写了static
,不公共静态
对吗?此外,尝试放置静态$contract\u year=2019在$contrat=…
之前,删除=ContractYear::…
以查看此功能?我在我的一个项目中就有这个,它正在工作。是的,这样我就不会出错,但增量是针对每个合同的。因此,如果我有一份合同的4行,所有的都是(2019年,2019年…),在下一份合同中我得到(2020年…)等等。对同一份合同来说不是递增的。我已经提高了我的答案。这样试试。IRC正确声明变量属性时,您无法分配变量或函数结果。我没有收到任何错误,但增量是在每个协定上完成的,而不是在分配给协定的每一行上完成的,如上文所述。除非您一次运行一次工厂,否则这不会起作用。工厂是批量生产的,因此每个$contract_年都将是空的,然后是2019年,然后是2020年++。除非你一次运行一次工厂,否则这不会起作用。工厂正在批量插入,因此每个$contract\u year都将为空,然后是2019年,然后是++之后的2020年。我得到了这个错误:“Undefined property:Illumb\Database\Elounce\Factory::$contract\u year”好的,差不多了。是递增的,但对于所有合同,在进入下一个合同时不会重置为2019年。如何将2019年设定为每份合同的第一个价值?@Beusebiu了解到其中一些是可以的,一些仍然是从2025年开始递增的。前3个合同是可以的,第4个是2023年开始的,第5个是可以的,奇怪的行为。我得到了这个错误:“未定义的属性:Illumb\Database\Eloquent\Factory::$contract\u year”可以,差不多了。是递增的,但对于所有合同,在进入下一个合同时不会重置为2019年。如何将2019年设定为每份合同的第一个价值?@Beusebiu了解到其中一些是可以的,一些仍然是从2025年开始递增的。前3份合同可以,第4份合同从2023年开始,第5份合同可以,奇怪的行为。