代码之家  ›  专栏  ›  技术社区  ›  melokki

访问条令实体中的一方关系时未定义索引

  •  0
  • melokki  · 技术社区  · 6 年前

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

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

    我正在尝试访问以下电影源:

    $movie->getSources()
    

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

    Notice: Undefined index: movie
    

    我不明白为什么

    我的代码有问题吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   melokki    6 年前

    我已经运行了条令:模式:验证命令,现在我想我明白了。

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

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

    非常感谢您抽出宝贵的时间。

        2
  •  0
  •   Jim Panse    6 年前

    基于实体的github链接:

    第一

    你不能这么做 $movie->getSources() 因为没有调用字段 $sources 在你的电影课上

    第二

    在电影实体中,有一个字段称为 $movieSource 这是一对多的关系。应重命名为 $movieSources 因为你会得到MovieSource对象的ArrayCollection

    我怀疑,你想与电影建立一种千丝万缕的关系<-&燃气轮机;来源

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

    请参见此处: 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();
    }
    

    最有可能的是,您最初的询问错误随这些更改而消失。