Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
工厂上的增量编号,Laravel_Laravel_Laravel 6_Laravel Factory - Fatal编程技术网

工厂上的增量编号,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份合同可以,奇怪的行为。