为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用连接表和多对多关系显示 ArrayCollection 的元素?

如何使用连接表和多对多关系显示 ArrayCollection 的元素?

PHP
ibeautiful 2022-01-02 14:42:31
在我的实体中,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 ▶}        ]
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

我找到了解决办法。取而代之的是:


$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();

    }


查看完整回答
反对 回复 2022-01-02
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信