我正在开发一个使用Sonata的Symfony 3.3项目。我创建了两个实体:Question和QuestionGallery。我使用多对多关系和sonata_type_model来允许用户在每个问题库中嵌套一组问题。我的formMapper-> add()调用如下所示:
$formMapper
->add('name')
->add('visible')
->add(
'questions',
'sonata_type_model',
['expanded' => false, 'by_reference' => true, 'multiple' => true, 'required' => false]
)
;
到目前为止一切顺利。现在我想允许用户以他们选择的任意顺序重新排序Question对象。这就是我遇到问题的地方:即使我从列表中间删除了一个项目并在最后重新附加它,当我保存QuestionGallery时它又恢复到中间位置。换句话说,我相信这些问题是由ID订购的。
在短期内,我简单地在Question实体中添加了一个“rank”字段,该字段运行良好。 但我很好奇:是否有内置的方法允许任意重新排序而不引入用户必须手动填写的额外字段?(如果您知道允许用户拖动的方式,则可以获得奖励删除实体。)
答案 0 :(得分:3)
您可以使用带注释的学说映射:
/**
..ect..
*@ORM\OrderBy({"ranking" = "ASC"})
*/
protected $questions;
在您的管理员中:
$formMapper
->add(
'questions',
'sonata_type_collection',
[
'expanded' => false,
'by_reference' => true,
'multiple' => true,
'required' => false
],
[
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'ranking',
'order' => 'ASC'
]
)
;