我在我的实体中:
/**
* @ORM\ManyToMany(targetEntity="Sancho\UserBundle\Entity\followers", mappedBy="followers")
*/
private $followers;
在索纳塔,我想得到$粉丝的数量[]。我在我的实体中创建:
public function getFollow()
{
return count($this->followers);
}
在UserAdmin中我有:
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('id')
->add('follow', null, array('sortable'=>true));
}
我有$跟随[]的数量,但我无法对该字段进行排序。当我排序时,我有错误:
PHP Catchable fatal error: Argument 1 passed to Sonata\\DoctrineORMAdminBundle\\Datagrid\\ProxyQuery::entityJoin() must be of the type array, null given, called in /home/sancho/work/Web/vendor/sonata-project/doctrine-orm-admin-bundle/Datagrid/ProxyQuery.php on line 140 and defined in /home/sancho/work/Web/vendor/sonata-project/doctrine-orm-admin-bundle/Datagrid/ProxyQuery.php on line 245
答案 0 :(得分:1)
你看错了方向...... sonata中的可排序用于定义一个字段,它将保存一个位置编号,这样你就可以根据它为自己编写的索引来订购东西,所以它需要数据库中的一个字段,这就是为什么你会得到那个错误。您需要做的是使用订购功能覆盖admin类中的 createQuery 方法。看看here如何做到这一点。
答案 1 :(得分:0)
我不确定这是否适用于您的情况。但我相信问题可能就是你如何进入这个领域。
->add('follow', null, array('sortable'=>true));
你应该使用
->add('followers.follow');
我和一家商店之间存在关系。和'产品'我使用ManyToOne
关系,从关系表我->addIdentifier('store')
显然使用__toString方法,因此无法排序。但是,当我关联->addIdentifier('store.name')
时,name
字段可以进行排序。