学说:关系一直作为代理返回

时间:2016-06-14 12:39:08

标签: php doctrine-orm proxy doctrine

我的域名设置如下:

model

当我获取Page Blocks($ blocks)时,它有一个关系加入。这始终是ContentBlock(还有其他类型的Blocks,但它们不适用于我的问题)。 ImageContentBlockContentBlock,与ImageContentBlockImage($ images)保持1:n的关系。这包含特定信息,例如$ link,$ caption等。它还引用了Image到$ image。这是一个ManyToOne关系。

我遇到的问题是,当我尝试从Image获取ImageContentBlockImage时,我总是得到一个Proxy对象。我无法解决的问题。我需要这是真正的对象,因为整个对象被序列化为会话(Redis)。序列化的代理对象最终为PHP_Incomplete_Object。

在整个域中,我对包含关系的所有属性都有fetch="EAGER"注释,所有这些都来自PageImage。这些是: $page => $blocks$block => (ImageContentBlockImage) $images$images => (Image) $image)。但是我仍然得到代理对象。

Image是名为File的域实体的扩展。我想这与它无关,但就在这里提一下。

我想知道如何检索完整对象而不是Image $ image的代理对象。

===

现在我有一个用于获取块的存储库,它可以连接Image& ImageContentBlockImage实体:

$qb->select('block', 'imageBlock', 'image')
->from(Block::class, 'block')
->join(ImageContentBlockImage::class, 'imageBlock', Expr\Join::WITH, 'imageBlock.block = block')
->join(Image::class, 'image', Expr\Join::WITH, 'imageBlock.image = image')
->where('block IN (:blocks)')
->setParameter('blocks', $page->getBlocks())
->groupBy('block.id')
->orderBy('block.order');

返回此结果仍然会获得一个Proxy对象:

object(stdClass)[1123]
public '__CLASS__' => string 'Domain\Block\ContentBlock\Image\ImageContentBlockImage' (length=63)
public 'block' => string 'Domain\Block\ContentBlock\Image\ImageContentBlock' (length=58)
public 'image' => string 'Proxy\__CG__\Domain\Domain\File\Image' (length=47)
public 'caption' => null
public 'position' => null
public 'link' => null
public 'order' => int 1
public 'id' => int 4
public 'locale' => null

0 个答案:

没有答案