在学说实体中访问 OneToMany 关系时未定义的索引

Undefined index when accessing OneToMany relationship in doctrine entity

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

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

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

$movie->getSources()

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

Notice: Undefined index: movie

我不明白为什么

是不是我的代码有问题?

根据您的 github link 实体:

第一

您不能执行 $movie->getSources(),因为您的电影 class

中没有名为 $sources 的字段

第二

在你的电影实体中有一个名为 $movieSource 的字段,它是一对多关系。那应该重命名为 $movieSources 因为你会得到 MovieSource-objects

的 ArrayCollection

我怀疑,您想为 Movie <-> Source 建立 ManyToMany 关系模型?

如果是,您可以直接 link 这些实体相互联系而不用担心中间人 table,学说会为您做到这一点。

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

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

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

$movie->getMovieSources() 

并迭代此集合。

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

最有可能的是,您最初提出的错误已随着这些更改而消失。

我已经 运行 doctrine:schema:validate 命令,现在我想我明白了。

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

我已经删除了第一个,现在我在调用 getSources 方法时得到了想要的结果。

非常感谢您的宝贵时间。