Symfony 与条令的深层关系

Symfony 与条令的深层关系,symfony,doctrine,Symfony,Doctrine,我目前正在使用以下堆栈开发一个API Symfony(3) FOSRestBundle 分形 我想集成通过查询参数指定检索实体/集合时要包含哪些关系的功能,例如 [GET] /users?include=friends.addresses 但是,由于这发生在响应构建的序列化点附近,因此通过延迟加载检索每个相关实体,从而触发其他查询 在检索集合时,有没有一种方法可以告诉条令动态地检索指定的关系?然而,我发现这似乎只适用于目标实体上的关联(friends,在上面的示例中),而不适用于更深层次的

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

  • Symfony(3)
  • FOSRestBundle
  • 分形
我想集成通过查询参数指定检索实体/集合时要包含哪些关系的功能,例如

[GET] /users?include=friends.addresses
但是,由于这发生在响应构建的序列化点附近,因此通过延迟加载检索每个相关实体,从而触发其他查询

在检索集合时,有没有一种方法可以告诉条令动态地检索指定的关系?然而,我发现这似乎只适用于目标实体上的关联(
friends
,在上面的示例中),而不适用于更深层次的关系(
地址
在示例中是
friends


谢谢

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

类服务
{
受保护$em;
公共函数构造(EntityManager$em)
{
$this->em=$em;
}
公共函数包括($class、$alias、$includes)
{
//解析包含到数组中
if(strpos($includes,'.')!==false){
$relations=分解('.',$includes);
}否则{
$relations=[$includes];
}
//下一个关系属于上一个关系,因此我们跟踪上一个关系
$previousRelation=$alias;
$qb=$em->getRepository($class)->getQueryBuilder($previousRelation);
foreach($relations作为$relations){
//向引用新关系的查询生成器添加内部联接
$qb->innerJoin(“{$previousRelation}.{$relation},$relation”);
$previousRelation=$relation;
}
//返回查询生成器或查询结果
返回$qb;
}
}

谢谢,这似乎是最好的解决方案,因此我将在此基础上继续努力,很高兴能为您提供帮助。我发现我忘了把
$str
改成
$includes
,所以我修正了这个问题。