如何显示我的 ArrayCollection 的元素与连接表和 ManyToMany 关系一起使用?

How can I display elements of my ArrayCollection working with joined Tables and ManyToMany relations?

在我的实体 documents 中,我有一个名为 linkedDocuments:

的字段
class Documents {

  /**
  * @ORM\ManyToMany(targetEntity="App\Entity\Documents")
  * @ORM\JoinTable(name="documents_documents",
  *      joinColumns={@JoinColumn(name="link_origin", referencedColumnName="id")},
  *      inverseJoinColumns={@JoinColumn(name="link_destination", referencedColumnName="id")}
  *      )
  * @Groups("documents")
  */
  private $linkedDocuments;


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

在我的控制器中我创建了一个对象:

$table = $this->em->getRepository(Documents::class)->findAll();

这是输出:

array:1 [▼
  0 => Documents^ {#6414 ▼
    -id: 1
    -linkedDocuments: PersistentCollection^ {#5724 ▼
      -snapshot: []
      -owner: Documents^ {#6414}
      -association: array:19 [ …19]
      -em: EntityManager^ {#2786 …11}
      -backRefFieldName: null
      -typeClass: ClassMetadata {#2613 …}
      -isDirty: false
      #collection: ArrayCollection^ {#2820 ▼
        -elements: []
      }
      #initialized: true
    }
  }
]

我的数组集合是空的。但我希望它有两个元素,因为我在 mySQL 数据库中看到了它们。像这样:

 -elements: array:2 [▼
          0 => linkedDocuments^ {#1204 ▶}
          1 => linkedDocuments ▶}
        ]

我找到了解决办法。 而不是这个:

$table = $this->em->getRepository(Documents::class)->findAll();

我不得不这样写:

$table = $this->em->getRepository(Documents::class)->linkedDocuments($id);

并且在我的 DocumentsRepository 中添加了函数:

  public function linkedDocuments($id)
    {
      return $this->createQueryBuilder('d')
      ->leftJoin('d.linkedDocuments', 'dd')
      ->where('d.id = :id')
      ->setParameter(':id', $id)
      ->getQuery()
      ->execute();
    }