如果不必要,避免学说 postloadEvent
Avoid doctrine postloadEvent if unnecessary
对于博客条目实体,我正在通过学说 postloadEvent 从 api 加载数据。为此,我创建了一个带有 postloadMethod 的监听器服务。
public function postLoad(BlogEntry $blogEntry)
{
$blogentry->setName($apiClient->getName($blogEntry->getId()))
$blogentry->setContent($apiClient->getContent($blogEntry->getId()))
...
}
这意味着,已经有一个包含博客条目的本地存储库。这些博客条目连接到一个博客。如果我现在只想计算每个博客的 blogentries,我会在 BlogEntry 实体上实现一个 getBlogEntryCount() 方法并调用它。
$blog->getBlogEntryCount();
现在的问题是,postLoad 事件被不必要地触发,即使我不需要来自 api 的数据。
如何在 doctrine/symfony/sonata 管理员中避免这种行为?学说实体是否有类似 "lazy loading" 的机制?
Jose M. González 解决方案更新
要仅获取集合的计数,extra_lazy 加载解决方案将执行此操作。
为了在不触发 api 调用的情况下获取本地信息,我使用了上述存储库函数。为了让这些信息在 sonata admin 的列表视图中工作,我在我的 "blogEntries"(通常包含完整实体)字段旁边的我的博客实体中创建了一个非教义相关的数组字段 "blogEntriesSimple"。
我将一个带有 postLoad 函数的实体监听器附加到博客实体,它使用来自我的自定义存储库函数的信息填充我的 blogEntriesSimple 数组。
就是这样。
我认为这个解决方案有点 hacky,但在没有更干净的解决方案可用之前,这个就可以了。
我认为你可以通过 extra lazy associations 实现这一点,它允许你在不水合的情况下计算你的相关实体
已编辑
您还可以执行仅隐藏实体部分视图的 DQL 查询,它可用于计算行数和访问您的属性,例如:
select be.id,be.title from AppBundle\Entity\BlogEntry be
此查询不得触发 postLoad 事件
希望对您有所帮助
对于博客条目实体,我正在通过学说 postloadEvent 从 api 加载数据。为此,我创建了一个带有 postloadMethod 的监听器服务。
public function postLoad(BlogEntry $blogEntry)
{
$blogentry->setName($apiClient->getName($blogEntry->getId()))
$blogentry->setContent($apiClient->getContent($blogEntry->getId()))
...
}
这意味着,已经有一个包含博客条目的本地存储库。这些博客条目连接到一个博客。如果我现在只想计算每个博客的 blogentries,我会在 BlogEntry 实体上实现一个 getBlogEntryCount() 方法并调用它。
$blog->getBlogEntryCount();
现在的问题是,postLoad 事件被不必要地触发,即使我不需要来自 api 的数据。
如何在 doctrine/symfony/sonata 管理员中避免这种行为?学说实体是否有类似 "lazy loading" 的机制?
Jose M. González 解决方案更新
要仅获取集合的计数,extra_lazy 加载解决方案将执行此操作。 为了在不触发 api 调用的情况下获取本地信息,我使用了上述存储库函数。为了让这些信息在 sonata admin 的列表视图中工作,我在我的 "blogEntries"(通常包含完整实体)字段旁边的我的博客实体中创建了一个非教义相关的数组字段 "blogEntriesSimple"。 我将一个带有 postLoad 函数的实体监听器附加到博客实体,它使用来自我的自定义存储库函数的信息填充我的 blogEntriesSimple 数组。 就是这样。
我认为这个解决方案有点 hacky,但在没有更干净的解决方案可用之前,这个就可以了。
我认为你可以通过 extra lazy associations 实现这一点,它允许你在不水合的情况下计算你的相关实体
已编辑
您还可以执行仅隐藏实体部分视图的 DQL 查询,它可用于计算行数和访问您的属性,例如:
select be.id,be.title from AppBundle\Entity\BlogEntry be
此查询不得触发 postLoad 事件
希望对您有所帮助