Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
Php 为什么';在夹具加载期间,实体的ID是否从1开始递增?_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php 为什么';在夹具加载期间,实体的ID是否从1开始递增?

Php 为什么';在夹具加载期间,实体的ID是否从1开始递增?,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我已经为我的两个实体制作了固定装置,它们有很多关系。我的ColorFixtures加载,然后是我的FabricFixtures。正如您在下面的代码中所看到的,我使用ColorRepository向织物添加了一种颜色。我总是遇到以下错误: Argument 1 passed to App\Entity\Fabric::addColor() must be an instance of App\Entity\Color, null given, called in /var/www/html/src

我已经为我的两个实体制作了固定装置,它们有很多关系。我的
ColorFixtures
加载,然后是我的
FabricFixtures
。正如您在下面的代码中所看到的,我使用
ColorRepository
向织物添加了一种颜色。我总是遇到以下错误:

Argument 1 passed to App\Entity\Fabric::addColor() must be an instance of App\Entity\Color, null given, called in /var/www/html/src/DataFixtures/FabricFixtures.php on line 44
所以我试着再深入一点,问题是,在加载ColorFixture的最后,我的颜色ID从222变为241(因为我已经尝试了很多次加载这些装置,在某一点上,ID的数字必须更低,因为下一次加载时,我转储了从242到261的ID,在此之前我尝试了一个唯一的ID是221)

当然,当我使用ColorRepository在FabricFixtures中查找id 1到20时,颜色为空,因为在这一点上,id高出200倍

当我在fixture进程之后转储颜色时(在控制器中),ID被正确地设置为1到20。因此我的问题是:为什么一个实体的ID在fixture加载过程中不开始以1递增?我想之前加载的fixture会有一些缓存,但我真的不知道,如果确实是这样,为什么会有缓存。我如何确保ID总是启动t在1处递增,以便我可以安全地为我的面料添加颜色

注意:即使在运行了
bin/console cache:clear
之后,“临时”ID仍在增加(上次转储时:282到301)

注2:我不知道这是否重要,但我使用的是Symfony 5和条令/条令捆绑包3.3

注3:我认为这是一个相关的问题,在阅读了维护人员的回答后,我理解我不应该依赖于另一个实体的固定装置中我实体的递增ID。我理解得好吗?如果是,你有什么线索可以帮助我创建织物和颜色之间的关系吗

注4:事实上,这是我几个月来一直在做的一个个人项目,除了工作和学校,我先是用Laravel开发,然后用Symfony学习框架,然后回到Laravel,因为我更喜欢这个框架,现在我又回来了(最后!)在Symfony上。在Laravel版本中,我刚刚制作了一个FabricColor“Fixtures”,在这里我进行了DB查询,将原始ID添加到DB表中。这就是我在Symfony中应该如何做的吗?最后,我的问题不应该是:制作具有许多关系的Fixtures的最佳方法是什么?

非常感谢

制作固定装置
(我使用̀DependentFixtureInterface`确保ColorFixtures在FabricFixtures之前有效加载)


<代码>查看“代码>共享设备之间的对象< /代码>中。您也可以考虑添加<代码> DMAICHE/TRAIL测试包在每次测试之后重置数据库。我已经阅读了这一节,但它真的是“干净的”吗?"要为创建的20种颜色添加一个引用?我可以在创建颜色的for循环中创建引用,但这对我来说似乎不是真正优化的,因为如果我创建20个引用,但只使用4个,因为我随机选择将添加到织物的颜色,这会留下16个引用未使用…至于捆绑包,我不使用ant重置数据库,因为它不是测试:我只需要虚拟数据进行开发。当数据库中的ID为1到20时,只有Fixture中的ID更高。看来多次加载Fixture实际上是在测试代码。测试很好。对于生产,Fixture应该是“设置并忘记它”。是的,我同意你的观点,测试是好的,但我没有多次加载fixture来测试我的代码。我已经一次又一次地加载fixture,以查看我得到的错误是否仍然存在。我的目标是在开发模式下只设置一次fixture,以便让对象可以使用:我不打算测试CRUD操作,因为这将由PI平台;我主要想让这些对象做前端接口。但是,这可能不是固定工具的用途。它们应该仅仅用于测试目的吗?这是你要找的吗?请看“代码>共享设备之间的对象< <代码> >。你也可以考虑添加<代码> DMAIGHE/TRAIL测试包< /代码>到R。在每次测试后对数据库进行eset。我已经阅读了这一部分,但它真的“干净”吗要为创建的20种颜色添加一个引用?我可以在创建颜色的for循环中创建引用,但这对我来说似乎不是真正优化的,因为如果我创建20个引用,但只使用4个,因为我随机选择将添加到织物的颜色,这会留下16个引用未使用…至于捆绑包,我不使用ant重置数据库,因为它不是测试:我只需要虚拟数据进行开发。当数据库中的ID为1到20时,只有Fixture中的ID更高。看来多次加载Fixture实际上是在测试代码。测试很好。对于生产,Fixture应该是“设置并忘记它”。是的,我同意你的观点,测试是好的,但我没有多次加载fixture来测试我的代码。我已经一次又一次地加载fixture,以查看我得到的错误是否仍然存在。我的目标是在开发模式下只设置一次fixture,以便让对象可以使用:我不打算测试CRUD操作,因为这将由PI平台;我主要想让这些对象做前端接口。但可能这不是夹具的用途?它们应该只用于测试目的吗?这是你想要的吗?
 App\Entity\Color^ {#558
  -id: 221
  -name: "name"
  -code: "code"
  -fabrics: Doctrine\ORM\PersistentCollection^ {#542
    -snapshot: []
    -owner: App\Entity\Color^ {#558}
    -association: array:16 [ …16]
    -em: Doctrine\ORM\EntityManager^ {#171 …11}
    -backRefFieldName: "color"
    -typeClass: Doctrine\ORM\Mapping\ClassMetadata {#451 …}
    -isDirty: false
    #collection: Doctrine\Common\Collections\ArrayCollection^ {#545
      -elements: []
    }
    #initialized: true
  }
}