【问题标题】:Laravel factory specifying column twiceLaravel 工厂指定列两次
【发布时间】:2017-01-06 19:48:08
【问题描述】:

我正在使用工厂进行单元测试,到目前为止我还没有遇到任何问题:

// 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 是在这个工厂中。我的应用程序中有大约两打工厂,这是唯一有问题的工厂。这个特定的表有一个主键,没有其他索引。这张桌子就像他们来的一样香草。
  • 这实际上是在the Laravel docs 中推荐的。我没有做任何不寻常的事情。

【问题讨论】:

    标签: php laravel unit-testing laravel-5.1


    【解决方案1】:

    找到了!

    看起来当我输入答案时,我实际上并没有粘贴单元测试代码,而是在这里输入了它。问题是,即使生成的 SQL 的所有列都是小写的,我在单元测试中将id_media 输入为Id_media,因为我正在覆盖列值。当我将其更改为全小写时,它开始工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-24
      • 2019-01-08
      • 2020-11-20
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      相关资源
      最近更新 更多