Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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 条令始终为现有实体启动INSERT而不是更新_Php_Symfony_Doctrine Orm_Doctrine_Symfony4 - Fatal编程技术网

Php 条令始终为现有实体启动INSERT而不是更新

Php 条令始终为现有实体启动INSERT而不是更新,php,symfony,doctrine-orm,doctrine,symfony4,Php,Symfony,Doctrine Orm,Doctrine,Symfony4,假设我有以下实体: App\Entity\main实体: /** * @var object * * @ORM\OneToOne(targetEntity="App\Entity\DependentEntity", fetch="EAGER") * @ORM\JoinColumn(name="DependentEntityType1FK", referencedColumnName="DependentEntityIDPK") */ private $dep

假设我有以下实体:

App\Entity\main实体:

  /**
   * @var object
   *
   * @ORM\OneToOne(targetEntity="App\Entity\DependentEntity", fetch="EAGER")
   * @ORM\JoinColumn(name="DependentEntityType1FK", referencedColumnName="DependentEntityIDPK")
   */
  private $dependentEntityType1;

  /**
   * @var object
   *
   * @ORM\OneToOne(targetEntity="App\Entity\DependentEntity", fetch="EAGER")
   * @ORM\JoinColumn(name="DependentEntityType2FK", referencedColumnName="DependentEntityIDPK")
   */
  private $dependentEntityType2;
基本上,使用主实体表中的两个不同列,从主实体到同一从属实体的一个方向1:1关系

无论我是使用
fetch=“EAGER”
还是通过Doctrine代理类进行正常的延迟加载,当我执行以下操作时,这都无关紧要:

  $mainEntity = $this->mainEntityRepository->find(74);
  $mainEntity->setDependentEntityType1($this->dependentEntityRepository->find(35));
  $this->mainEntityRepository->saveTest($mainEntity);
其中
::saveTest()
是:

  public function saveTest(MainEntity $mainEntity) {
    $this->_em->persist($mainEntity->getDependentEntityType1());
    $this->_em->merge($mainEntity);
    $this->_em->flush();
  }
它总是尝试向表中插入一个新的依赖实体,即使我从未做过任何更改(即使我做了更改,也应该对其进行更新!)

问题是:如果我做了
$this->dependentEntityRepository->find(35)
,那么条令为什么会决定这个依赖实体是新的呢

我尝试了
fetch=“EAGER”
认为
spl\u object\u hash
可能会为代理类实例和实际的DependentEntity实例返回不同的hash,但这并不重要,DependentEntity出于某种原因总是被认为是“新的”

更新:以下是
的代码::setDependentEntityType1()


一边谢谢@ficuscr!问题是这是一个单向关系,因此依赖实体没有一个带有
main\u entity\u id
的列,我们不需要在其中包含对主实体的引用的属性,因此我不能将任何内容放入所属(主实体)的
inversedBy
。闻起来很熟悉,但在看医生的时候却很困(我就是这么做的),所以我不想打赌答案。很高兴你明白了!抱歉误会,我的意思是感谢你的评论:)但问题仍然存在。我刚才解释说我不能把任何东西放入inversedBy中,因为依赖实体中没有任何东西指向主实体,因为它是单向映射。明白我的意思了吗:)你能更清楚地说明函数
setDependentyType1
的作用吗?这里有点奇怪。我从未在《教义》中写过这样的东西。FYI
merge
应在中删除。一边谢谢@ficuscr!问题是这是一个单向关系,因此依赖实体没有一个带有
main\u entity\u id
的列,我们不需要在其中包含对主实体的引用的属性,因此我不能将任何内容放入所属(主实体)的
inversedBy
。闻起来很熟悉,但在看医生的时候却很困(我就是这么做的),所以我不想打赌答案。很高兴你明白了!抱歉误会,我的意思是感谢你的评论:)但问题仍然存在。我刚才解释说我不能把任何东西放入inversedBy中,因为依赖实体中没有任何东西指向主实体,因为它是单向映射。明白我的意思了吗:)你能更清楚地说明函数
setDependentyType1
的作用吗?这里有点奇怪。我从未在《教义》中写过这样的东西。FYI
merge
应在中删除。
  public function setDependentEntityType1(DependentEntity $dependentEntity) : void {
    $this->dependentEntity = $dependentEntity;
  }