Doctrine orm 加载已作为部分关联加载的实体

Doctrine orm 加载已作为部分关联加载的实体,doctrine-orm,Doctrine Orm,我遇到了一个奇怪的bug,它与加载一个实体有关,该实体已经作为一个部分存在于标识映射中 鉴于我有以下实体定义: /** @ORM\Entity */ class Test { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** @ORM\Column(type="string") */ private $

我遇到了一个奇怪的bug,它与加载一个实体有关,该实体已经作为一个部分存在于标识映射中

鉴于我有以下实体定义:

/** @ORM\Entity */
class Test
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /** @ORM\Column(type="string") */
    private $name;

    /** @ORM\Column(type="datetime") */
    private $created;

    /**
     * @ORM\ManyToMany(targetEntity="Test")
     */
    private $related;

    public function __construct($name)
    {
        $this->name = $name;
        $this->created = new DateTime();
        $this->related = new ArrayCollection();
    }

    public function getId()
    {
        return $this->id;
    }

    public function addRelated(Test $related)
    {
        $this->related[] = $related;
    }
}
我创建了两个测试实体,保存它们并刷新实体管理器:

$test1 = new Test('Test 1');
$test2 = new Test('Test 2');
$test1->addRelated($test2);
导致以下数据以db表示:

然后,我将多对多关联作为一个部分加载它们:

$res = $em->createQueryBuilder()
    ->select('test, partial related.{id}')
    ->from(Test::class, 'test')
    ->leftJoin('test.related', 'related')
    ->where('test.id IN (:ids)', [$id1, $id2])
    ->getQuery()->getResult();
然后我的问题来了: 实体测试2作为部分相关。{id}加载,并保存到dentity映射。 然后,当它应该作为一个完整的实体再次获取时,我假设它是从标识映射加载的,因此它不包含其他属性


这是一个bug还是一个功能?

在我看来似乎是部分功能的正常行为。所以我根本不应该以部分的形式加入自引用关联?在几乎任何情况下都要避免部分的。@Ocramius,部分有什么问题吗?如果我不需要检索所有列,我会经常引用它们?我相信您想要做的是->选择'test,IDENTITYrelated',而不是partial