访问doctrine实体中的OneToMany关系时未定义的索引

时间:2018-05-18 13:11:43

标签: php symfony doctrine symfony4

我的表格有以下实体结构:https://gist.github.com/melokki/e2e0d7c03ee71c37c1185602562da6af

$movie = $repository->findOneBy([
    'title' => 'movie title',
]);

我正在尝试访问这样的电影来源:

$movie->getSources()

根据我可以做的文档,但是现在我收到以下通知

Notice: Undefined index: movie

我无法理解为什么

我的代码有问题吗?

2 个答案:

答案 0 :(得分:0)

根据您实体的github链接:

<强>第一

由于您的电影课程中没有名为$movie->getSources()的字段,因此您无法$sources

<强>第二

在您的电影实体中,有一个名为$movieSource的字段,它是一对多的关系。应将其重命名为$movieSources,因为您将返回MovieSource对象的ArrayCollection

我怀疑,你想用Movie&lt; - &gt;建模一个ManyToMany关系源?

如果是,您可以直接将这些实体相互链接而不必担心中间表,学说会为您做到这一点。

见这里: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/association-mapping.html#many-to-many-bidirectional

如果没有实际用途,我强烈建议丢弃中间表。

但是如果你想保留这个模型,你必须调用(在更改方法名称后)

$movie->getMovieSources() 

并遍历此集合。

for ($movie->getMovieSources() as $movieSource) {
  $moviesource->getSource();
}

最有可能的是,您的原始问题错误随着这些变化而消失。

答案 1 :(得分:0)

我运行了doctrine:schema:validate命令,现在我觉得我得到了它。

我的问题是,在MovieSchema $movie属性中,我对该字段有两个注释:@ORM\Column(type="string", name="movie_id")@ORM\JoinColumn(name="movie_id", referencedColumnName="id", nullable=false)

我删除了第一个,现在我在调用getSources方法时得到了所需的结果。

非常感谢您的所有时间。