Symfony SonataAdminBundle预加载SQL对象
在使用SonatAdminBundle时,我试图可视化数据库的叶节点。我的表格是A->B->C(->=包含一些)。我试图可视化的叶节点是C C有一个uuuToString(),它将调用B.uuuToString(),后者依次调用a.uuuuToString() 问题是:我最后显示了30行,并向数据库打了700个电话 有时,我可以通过添加一个过滤器来避免这个问题,因此它会首先向过滤器发出请求,并“预加载”一些对象,但在这种情况下,我无法添加这样的过滤器 有没有办法预先加载我的对象?答案可能包含两个部分:Symfony SonataAdminBundle预加载SQL对象,symfony,doctrine,sonata-admin,Symfony,Doctrine,Sonata Admin,在使用SonatAdminBundle时,我试图可视化数据库的叶节点。我的表格是A->B->C(->=包含一些)。我试图可视化的叶节点是C C有一个uuuToString(),它将调用B.uuuToString(),后者依次调用a.uuuuToString() 问题是:我最后显示了30行,并向数据库打了700个电话 有时,我可以通过添加一个过滤器来避免这个问题,因此它会首先向过滤器发出请求,并“预加载”一些对象,但在这种情况下,我无法添加这样的过滤器 有没有办法预先加载我的对象?答案可能包含两个
- 在奏鸣曲中我应该在哪里做这个
- 我应该执行什么代码来预加载对象层次结构,从而最大限度地减少对数据库的调用
createQuery
,您可以在其中放置自定义联接
例如:
这正是我需要的。但是,过滤器也有同样的问题。我应该在哪里运行联接以正确获取筛选器属性?
<?php
namespace Acme\DemoBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
class CarAdmin extends Admin
{
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
$query->leftJoin($query->getRootAlias . '.Model', 'mo');
$query->leftJoin('mo.Make', 'ma');
return $query;
}
}