You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级doctrine-fixtures-bundle至3.7.0后调用getReference()参数不足报错

问题

执行composer update后,doctrine/doctrine-fixtures-bundle升级至v3.7.0,doctrine/data-fixtures同步升级到v2.0.0,加载数据夹具时触发以下错误:

在AbstractFixture.php第78行:
Doctrine\Common\DataFixtures\AbstractFixture::getReference()函数参数过少,传入1个参数,预期正好2个

解决方法

doctrine/data-fixtures 2.0.0属于重大版本迭代,其中AbstractFixture类的getReference()和hasReference()方法做了破坏性签名变更:

  • v1.x 方法签名:getReference(string $name)
  • v2.x 方法签名:getReference(ObjectManager $manager, string $name)

针对这个问题,有两种修复路径:

路径1:适配新版本API

修改你所有Fixture类中调用getReference()/hasReference()的代码,传入ObjectManager实例作为第一个参数。
示例修改:

// 旧代码
$user = $this->getReference('admin-user');

// 新代码($manager是load方法的入参)
$user = $this->getReference($manager, 'admin-user');

如果你的Fixture类继承的是Doctrine\Bundle\FixturesBundle\Fixture(而非直接继承AbstractFixture),则无需手动传入ObjectManager——v3.7.0的doctrine/doctrine-fixtures-bundle已经适配了v2.x的底层依赖,Fixture类会自动处理ObjectManager的注入,直接调用$this->getReference('admin-user')即可。

路径2:降级依赖版本

如果暂时不想修改大量代码,可以在composer.json中锁定doctrine/data-fixtures的版本为1.x分支:

"doctrine/data-fixtures": "^1.6"

执行composer update doctrine/data-fixtures完成降级,即可恢复原有代码的正常运行。

内容的提问来源于stack exchange,提问作者Thomas Landauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:03:22