使用SonataAdminBundle时,我试图可视化数据库的叶节点。我的桌子是A - > B - > C( - > =包含一些)。我尝试可视化的叶节点是C.
C有一个__toString(),它将调用B .__ toString(),然后调用A .__ toString()。
问题:我最终显示30行并对数据库进行700次调用。
有时,我可以通过添加过滤器来避免这个问题,因此它会首先使用过滤器发出请求并“预加载”某些对象,但在这种情况下,我无法添加过滤器。
有预先预装物品的方法吗?答案可能包含两部分:
答案 0 :(得分:2)
您应该覆盖可以放置自定义联接的方法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;
}
}
请记住,createQuery
方法返回Sonata ProxyQuery对象,而不是Doctrine Query。因此,您应该对Admin::createQuery
返回的查询进行操作。