Symfony 2:索纳塔可分类

时间:2014-02-24 09:46:24

标签: php symfony sonata-admin symfony-sonata

我在我的实体中:

/**
 * @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

2 个答案:

答案 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字段可以进行排序。