Doctrine orm 加载已作为部分关联加载的实体
我遇到了一个奇怪的bug,它与加载一个实体有关,该实体已经作为一个部分存在于标识映射中 鉴于我有以下实体定义: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 $
/** @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