当前位置: 首页 > 知识库问答 >
问题:

与条令的深层关系

薛晨
2023-03-14

我目前正在使用以下堆栈开发一个API;

  • Symfony(3)

我想集成通过查询参数指定检索实体/集合时要包含哪些关系的功能,例如;

[GET] /users?include=friends.addresses

Fractal具有处理包含的能力,但是,由于这发生在响应构建的序列化点周围,每个相关实体都通过延迟加载来检索,从而触发额外的查询。

在检索集合时,有没有一种方法可以告诉条令动态地检索指定的关系?我从Doctrine文档中看到了以下内容,其中显示了如何动态更改获取模式,但是这似乎只适用于目标实体上的关联(上面的示例中的朋友),而不适用于更深层次的关系(示例中的朋友的地址)。

谢谢

共有1个答案

章博耘
2023-03-14

如果我没记错的话,您可以通过加入关系来“预加载”,而不是让惰性加载机制来处理它。一个想法可能是创建一个基于您的条件创建查询生成器的服务。这是我的意思的一个粗略片段:

class EagerService
{
    protected $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function resolveIncludes($class, $alias, $includes) 
    {
        // Parse includes into an array
        if (strpos($includes, '.') !== false) {
            $relations = explode('.', $includes);
        } else {
            $relations = [$includes];
        }

        // The next relation is owned by the previous one, so we keep track of the previous relation
        $previousRelation = $alias;
        $qb = $em->getRepository($class)->getQueryBuilder($previousRelation);
        foreach ($relations as $relation) {
            // Add inner joins to the query builder referencing the new relation
            $qb->innerJoin("{$previousRelation}.{$relation}", $relation);
            $previousRelation = $relation;
        }

        // Return query builder or the result of the query
        return $qb;
    }
}
 类似资料:
  • 问题内容: 我需要一个从任何参数构建JSON有效字符串的函数,但: 通过不两次添加对象来避免递归问题 通过截断给定深度来避免调用堆栈大小问题 通常,它应该能够处理大对象,但要以截断为代价。 作为参考,此代码失败: 避免递归问题很简单: 但是到目前为止,除了复制和更改Douglas Crockford的代码 以跟踪深度之外,我还没有找到任何方法来避免在诸如或any之类的非常深的对象上发生堆栈溢出。有

  • 深度学习的总体来讲分三层,输入层,隐藏层和输出层。如下图: 但是中间的隐藏层可以是多层,所以叫深度神经网络,中间的隐藏层可以有多种形式,就构成了各种不同的神经网络模型。这部分主要介绍各种常见的神经网络层。在熟悉这些常见的层后,一个神经网络其实就是各种不同层的组合。后边介绍主要基于keras的文档进行组织介绍。

  • 问题内容: 我有一个不同的numpy数组的numpy数组,我想对数组进行深层复制。我发现以下内容: d是执行此操作的最佳方法吗?我错过了深层复制功能吗?与大小不同的数组中的每个元素进行交互的最佳方法是什么? 问题答案: 请随时在此处阅读更多内容。 哦,这是最简单的测试用例:

  • 本书旨在讨论如何通过 checkout、branch、remote 等大约 30 个诸如此类动词形式的命令来玩转 Git。 然而,由于 Git 最初是一套面向版本控制系统的工具集,而不是一个完整的、用户友好的版本控制系统,所以它还包含了一部分用于完成底层工作的命令。 这些命令被设计成能以 UNIX 命令行的风格连接在一起,抑或藉由脚本调用,来完成工作。 这部分命令一般被称作“底层(plumbing

  • 我想引导一系列处理元素,并通过Guice将它们连接在一起。让我们假设以下路径: 需要一些输入 由实现需要 由实现需要 由实现需要 的依赖关系只能在运行时解决,而不能在配置时解决。通常的方法是在这种情况下使用辅助注入来创建工厂,该工厂将缺少的实例作为参数,如下所示: 但我真正想要的是这样的: 我不想在整个层次结构中手动传递AImpl的特定依赖项。使用Guice可以实现这一点吗?如果没有,在保持注射的

  • 我试图理解为什么在MatLab页面上AlexNet被描述为: AlexNet是一个8层的卷积神经网络。 使用analyzeNetwork()检查架构后,显然有25层。 25层与8层深度的关系如何?这两个值之间有什么区别?我肯定我错过了什么,但我不知道是什么。