Php 以数组格式访问多对多关系,symfony2

Php 以数组格式访问多对多关系,symfony2,php,symfony,doctrine-orm,dql,Php,Symfony,Doctrine Orm,Dql,在symfony中,我们可以使用返回ArrayCollection类型对象的getter函数访问多对多关系。 例如,为了获得Alex的学生,我们可以调用$Alex->getStudens(),然后我就可以访问ale的studens对象 现在我的问题是如何在数组中访问alex的学生id,例如通过调用$alex->getStudentsIds()它返回{1,5,7,12,…},这是他的学生id。确切地说,您是如何编写它的,您在实体中添加了另一个函数 public function getStuden

在symfony中,我们可以使用返回ArrayCollection类型对象的getter函数访问多对多关系。 例如,为了获得Alex的学生,我们可以调用
$Alex->getStudens()
,然后我就可以访问ale的studens对象


现在我的问题是如何在数组中访问alex的学生id,例如通过调用
$alex->getStudentsIds()
它返回{1,5,7,12,…},这是他的学生id。

确切地说,您是如何编写它的,您在实体中添加了另一个函数

public function getStudentsIds()
{
   $students = $this->students;
   $studentIds = [];

   foreach($students as $student)
   {
     $studentIds[] = $student->getId();
   }  

   return $studentIds;
}

理想的解决方案是将这种方法添加到存储库中,让它只查询给定对象的学生ID,但这是最简单的解决方案。

了解您的最终游戏可能比提供一个
QueryBuilder
或一个返回所有这些内容的自定义方法更有帮助。Doctrine在对象关系映射方面非常强大,您可以尝试在查询中使用
IN
功能,其中
成员可能是更好的方法。在设置关系时,也可以使用indexBy。在这种情况下,一个简单的数组_keys($students)就可以了。你能举一个你认为更有效的查询例子吗?谢谢:)$repository->createQueryBuilder('q')->select('IDENTITY(q.students)->where('q=:yourObject')->setParameter('yourObject',$yourObject)