我遇到了一个与加载已经在身份映射中的实体作为部分实体相关的奇怪错误。
鉴于我有以下实体定义:
/** @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:
中的以下数据
然后我将它们作为一个parial加载多对多关联:
$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”作为partial related.{id}
加载并保存到牙齿图中。
然后,当它应该作为一个完整的实体再次被提取时,它(我想)从身份地图加载,因此它不包含其他属性。
是这个错误还是一个功能?