Doctrine2:这些实体之间的关联出错。怎么了?

时间:2017-01-13 21:05:45

标签: php symfony doctrine-orm mapping

我有一个问题,Symfony 2.8。我一直试图解决这个问题。我不知道我做错了什么。

我有两个实体,vector和vectorData。对于向量中的每个记录,vectorData中至少有6条记录。外键在DB(MySQL)中设置好。

我的Vectors.php实体的相关部分:

/**
 * @ORM\OneToMany(targetEntity="VectorData", mappedBy="vector")
 */
private $vectorData;

public function __construct() {
    $this->vectorData = new ArrayCollection();
}

public function getVectorData()
{
    return $this->vectorData;
}

public function setVectorData(ArrayCollection $vectorData)
{
    $this->vectorData = $vectorData;
}

我的VectorData.php实体的相关部分:

/**
 * @ORM\ManyToOne(targetEntity="Vector", inversedBy="vectorData")
 */
protected $vector;

据我所知,ManyToOne方面不需要setter或getter。我没有兴趣进行反向映射。

我得到的错误是:

在呈现模板期间抛出以下异常:

  

[语义错误]第0行,第61行附近'vd WHERE v.id =:idVectorAND':错误:类AppBundle \ Entity \ Vectors没有名为vectorData的关联

任何可能出错的想法?​​

3 个答案:

答案 0 :(得分:1)

至少你的二传手是错误的。

public function setVectorData(ArrayCollection $vectorData)
{
    $this->vectorData = $vectorData;
}

这是正确的:

public function addVectorData(VectorData $vectorData)
{
    $this->vectorData->add($vectorData);
}
  

据我所知,ManyToOne方面不需要setter或getter。我没有兴趣进行反向映射。

令人怀疑

答案 1 :(得分:0)

您是否可以更改Entity VectorData以添加JoinColumn,您需要:

/**
 * @ORM\ManyToOne(targetEntity="Vector", inversedBy="vectorData")
 * @ORM\JoinColumn(name="vectorData_id", referencedColumnName="id")
 */
protected $vector;

我不知道Id列的name是什么;在上面的示例中,我使用id,但您可能会有不同的内容。

你能试试吗?我认为它可能会奏效。除非有不同的错误。

答案 2 :(得分:0)

首先: @Zaltex他的回答是完全正确的。你的二传手是错的。签入the Doctrine2 documentation here on how to manage your associations

第二次:当您的实体名为Illuminate\Auth\AuthManager时,您使用targetEntity="Vector"

如果这是另一个拼写错误,那么您应该在发布之前更仔细地检查您的问题。人们正试图帮助你,但实际上是在浪费时间盯着一个不完整且无法证实的例子。

阅读 How to ask How to create a Minimal, Complete, and Verifiable example 了解详情。

注意:如果您对“反向映射”不感兴趣,换句话说对双向关系不感兴趣,则应考虑将其更改为单向关系。简单地省略设置者和吸气剂是不可取的。