我的域名设置如下:
当我获取Page
Blocks
($ blocks)时,它有一个关系加入。这始终是ContentBlock
(还有其他类型的Blocks
,但它们不适用于我的问题)。 ImageContentBlock
是ContentBlock
,与ImageContentBlockImage
($ images)保持1:n的关系。这包含特定信息,例如$ link,$ caption等。它还引用了Image
到$ image。这是一个ManyToOne关系。
我遇到的问题是,当我尝试从Image
获取ImageContentBlockImage
时,我总是得到一个Proxy对象。我无法解决的问题。我需要这是真正的对象,因为整个对象被序列化为会话(Redis)。序列化的代理对象最终为PHP_Incomplete_Object。
在整个域中,我对包含关系的所有属性都有fetch="EAGER"
注释,所有这些都来自Page
到Image
。这些是:
$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