问题
is it possible to make a custom query in sonataadmin in configureListFields ? .
in this function :
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->>add(....
;
}
thank you !
回答1:
You should override createQuery
method like this (source):
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
// this is the queryproxy, you can call anything you could call on the doctrine orm QueryBuilder
$query->andWhere(
$query->expr()->eq($query->getRootAlias().'.username', ':username')
);
$query->setParameter('username', 'test'); // eg get from security context
return $query;
}
AFAIK, you cannot change SELECT
part of the query and you cannot use GROUP BY
, because internally Sonata runs this query at least two times. First, it checks how many rows query returns. Second, it runs this query paginated.
回答2:
As Tautrimas said, you can override the createQuery($context = 'list')
function in your admin class.
You can try to change the SELECT part of the query like this :
$query = parent::createQuery($context);
$query->add('select', 'm', false );
$query->add('from', 'Toto\MyBundle\Entity\MyEntity m', false );
The third parameter in the add function is a boolean to choose either to append or to replaces the query part.
来源:https://stackoverflow.com/questions/19211802/sonata-admin-configurelistfields