在学说实体中访问 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,学说会为您做到这一点。
如果没有实际用途,我强烈建议放弃中间 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 方法时得到了想要的结果。
非常感谢您的宝贵时间。
我的表具有以下实体结构: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
我怀疑,您想为 Movie <-> Source 建立 ManyToMany 关系模型?
如果是,您可以直接 link 这些实体相互联系而不用担心中间人 table,学说会为您做到这一点。
如果没有实际用途,我强烈建议放弃中间 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 方法时得到了想要的结果。
非常感谢您的宝贵时间。