Laravel工厂的递增编号

问题描述

我有一个工厂多次被调用,但是在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工厂,以获得更明确的面向对象方法

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...