问题描述
我有一个工厂多次被调用,但是在contract_year
列上我得到了相同的值。
$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` keyword inside function?
,在@FromJson
override fun fromJson(reader: JsonReader?): Date? {
return try {
val dateAsString = if (reader?.peek() == JsonReader.Token.NULL)
reader?.nextNull() else reader?.nextString()
synchronized(dateFormat) {
dateFormat.parse(dateAsString)
}
} catch (e: Exception) {
e.printStackTrace()
null
}
}
上添加计数器
$this
可能值得研究Laravel 8个新的Model工厂,以获得更明确的面向对象方法