Laravel 5.7:为什么我的模型的create()和save()方法在被调用时会创建2条记录?

时间:2019-03-07 13:27:39

标签: php laravel laravel-5 eloquent model

我在Apache上使用mysql DB Laravel 5.7。

我已经有一个完整的系统正在运行,并且一切似乎都很好,除了...我决定开始使用一些雄辩的工厂进行测试,并注意到当我保存/创建一个mysql时,这些工厂正在mysql中创建2个条目。模型。因此,我进行了简化,并创建了自己的“ makeFake”方法,发现它在做同样的事情。我不知道我做错了什么。也许框架中有些地方我还没有完全理解。

主要问题:为什么我的模型的create()和save()方法在被调用时会创建2条记录?

下面是简化的情况...(在这种情况下,我正在调用2种方法来创建公司,但是我得到了4条公司记录)

从我的web.php

Route::get('/savingTest', function () {

    $company = App\Company::makeFake1();
    dump($company);

    $company = App\Company::makeFake2();
    dump($company);

    return 'complete';
});

从我的Company.php模型中(我已经加载了造假者和GUID库)

public static function makeFake1()
{
    $faker = Faker::create();
    $company = new Company;
    $company->code = $faker->word;
    $company->name = $faker->company;
    $company->guid = Guid::create();
    $company->save();
    return $company;
}

public static function makeFake2()
{
    $faker = Faker::create();
    return Company::create([
        'code' => $faker->word,
        'name' => $faker->company,
        'guid' => Guid::create(),
    ]);

}

2 个答案:

答案 0 :(得分:1)

save()(新)和create()之间有区别

Laravel Mass Assignment

Laravel Inserts

当您调用create()时,它会立即创建一个新的雄辩模型项并将其提交到数据库。

调用新方法时,它会创建雄辩的模型项,但不会将其提交到数据库。

如果您要根据其他因素修改项目中的项目,请在末尾使用new和随后的save()。如果要使用纯数据批量创建项目,请使用create()函数。

因此,以下代码创建了2个项目:

$faker = Faker::create(); // First Record created
$company = new Company;
$company->code = $faker->word;
$company->name = $faker->company;
$company->guid = Guid::create();
$company->save(); // Second Record created

答案 1 :(得分:0)

在这里回答我自己的问题:

我发现了问题。。。令人沮丧。

我一直在努力查看代码中断的地方,但是我发现Chrome浏览器正在发送重复请求。当我在网址栏中输入http://127.0.0.1:8000/test1时,Chrome会向Web服务器发送两个get请求,而不是一个。

IE运行正常,而Firefox运行正常。