实体追踪可以关闭吗?

时间:2019-07-09 11:01:18

标签: symfony doctrine-orm

我已经建立了多个实体,并在各自的存储库中正常工作。但是,在不希望填充代理的地方,Doctrine似乎会填充代理。

我有一个名为Item的实体,该实体通过具有$category_id$category字段来引用类别。后者与@ORM\ManyToOne()@ORM\JoinColumn()建立了关系,可以正常工作。

在我的控制器中,当我查询项目时,我会收到一个包含相关类别代理的项目列表,可以从响应中删除这些列表,将其标识为代理。但是,如果由于某种原因,我还在不相关的查询中查询类别,则与项目相关的查询返回的不是代理而是实际的水合类别实例,这是我不希望的。

$this->categoryRepository->findBy(...);

...

$items = $this->itemRepository->findBy(...);
return $this->respond($items);

在这里,$ items [0]->类别将在执行到达return语句时由框架填充。

是否可以关闭此行为?

1 个答案:

答案 0 :(得分:0)

您可以将一种关系的var box = null; var touchobj = null; var position = {'x':0, 'y':0}; var positionbox = {'x':0, 'y':0}; // init touch $('.modal-header').on('touchstart', function(e){ box = $(this).closest('.modal-dialog'); touchobj = e.changedTouches[0]; // take position touch cursor position['x'] = touchobj.pageX; position['y'] = touchobj.pageY; //take original position box to move with touch positionbox['x'] = parseInt(box.css('left')); positionbox['y'] = parseInt(box.css('top')); e.preventDefault(); }); // on move touch $('.modal-header').on('touchmove', function(e){ var dist = {'x':0, 'y':0}; touchobj = e.changedTouches[0]; // we calculate the distance of move dist['x'] = parseInt(touchobj.clientX) - position['x']; dist['y'] = parseInt(touchobj.clientY) - position['y']; // we apply the movement distance on the box box.css('left', positionbox['x']+dist['x'] +"px"); box.css('top', positionbox['y']+dist['y'] +"px"); e.preventDefault(); }); 策略指定为fetch,这将在执行时获取最少的日期。根据{{​​3}}:

  

在Doctrine 2.1中,为关联引入了一个称为“额外延迟”的功能。关联默认情况下被标记为“惰性”,这意味着关联的整个集合对象是在首次访问时填充的。

因此,在您的EXTRA_LAZY批注中,向其他变量添加一个参数:@ORM\ManyToOne()