仅使用Doctrine从ManyToMany获取ID列表

Red*_*ile 3 php mysql symfony doctrine-orm

我有一个ManyToMany关联字段,我正处于这样一种情况,我只是试图获得所有的ID而不保护字段中的任何子实体.

我知道在我访问该字段时会有一个查询来获取实体引用,这很好/期望.但是我需要遍历ID,但我不知道如何在不做的情况下获取它们

$ids = [];
foreach($mainEntity->getSubEntities() as $subentity) {
   $ids[] = $subentity->getId();
}
Run Code Online (Sandbox Code Playgroud)

这也似乎自动地对子实体进行水合,因为foreach循环而假设.这会导致大量不必要的查询并影响页面加载时间.

我也有标记的subentity字段EXTRALAZY.

/**
 * @var ArrayCollection
 * @ORM\ManyToMany(targetEntity="User", fetch="EXTRA_LAZY")
 * @ORM\JoinTable(name="user_friends")
 */
protected $friends;
Run Code Online (Sandbox Code Playgroud)

spa*_*mat 7

由于getKeys()仅返回PersistentCollection的顺序索引,因此我发现这个oneliner作为解决方案:

$myCollectionIds = $myCollection->map(function($obj){return $obj->getId();})->getValues();
Run Code Online (Sandbox Code Playgroud)

IN上下文中顺利运行.