Laravel 工厂指定列两次
Laravel factory specifying column twice
我正在使用工厂进行单元测试,到目前为止我没有遇到任何问题:
// This is the factory definition (note: other fields removed for brevity).
// Primary key is not included just like Laravel's docs show.
$factory->define(Media::class, function (Faker\Generator $faker) {
return [
'id_media' => $faker->unique()->randomNumber(6),
'type' => $faker->randomNumber(1)
// other irrelevant fields
];
});
// This is how I call it on my unit test
$count = 5;
$id = 3;
factory(Media::class, $count)->create([
'id_media' => $id
]);
问题是这会生成无效的 SQL(id_media
出现了两次):
INSERT INTO media (id_media, type, id_media) VALUES (73052, 2)
如果我在单元测试中调用它时没有覆盖 id_media 属性,那么查询是有效的,但它不是我需要的。让我感到奇怪的两件事是:
- 我在我的所有测试中都使用了它,但唯一一次生成无效 SQL 的是这个工厂。我的应用程序中有大约两打工厂,这是唯一有问题的工厂。这个特定的 table 有一个主键,没有其他索引。 table 原汁原味。
- 这实际上是the Laravel docs中推荐的。我没有做任何不寻常的事情。
找到了!
看起来我在输入答案时实际上并没有粘贴单元测试代码,而是在此处输入了它。问题是即使生成的 SQL 的所有列都是小写的,我在单元测试中将 id_media
错误键入为 Id_media
因为我覆盖了列值。当我将其更改为全部小写时,它开始工作了。
我正在使用工厂进行单元测试,到目前为止我没有遇到任何问题:
// This is the factory definition (note: other fields removed for brevity).
// Primary key is not included just like Laravel's docs show.
$factory->define(Media::class, function (Faker\Generator $faker) {
return [
'id_media' => $faker->unique()->randomNumber(6),
'type' => $faker->randomNumber(1)
// other irrelevant fields
];
});
// This is how I call it on my unit test
$count = 5;
$id = 3;
factory(Media::class, $count)->create([
'id_media' => $id
]);
问题是这会生成无效的 SQL(id_media
出现了两次):
INSERT INTO media (id_media, type, id_media) VALUES (73052, 2)
如果我在单元测试中调用它时没有覆盖 id_media 属性,那么查询是有效的,但它不是我需要的。让我感到奇怪的两件事是:
- 我在我的所有测试中都使用了它,但唯一一次生成无效 SQL 的是这个工厂。我的应用程序中有大约两打工厂,这是唯一有问题的工厂。这个特定的 table 有一个主键,没有其他索引。 table 原汁原味。
- 这实际上是the Laravel docs中推荐的。我没有做任何不寻常的事情。
找到了!
看起来我在输入答案时实际上并没有粘贴单元测试代码,而是在此处输入了它。问题是即使生成的 SQL 的所有列都是小写的,我在单元测试中将 id_media
错误键入为 Id_media
因为我覆盖了列值。当我将其更改为全部小写时,它开始工作了。