我正在一個網站中使用一個公共屬性的許多實體。每當我想創建或更新任何這些實體時,我需要以特定的順序(按字母順序)以表單(HTML Select TAG)的形式呈現此屬性。ManyToOne OrderBy在symfony3和Doctrine中:如何在一個crud控制器中訂購EntityType表單元素
我確實記得,並不完全確定,在synfony2中,只需重寫findBy()類存儲庫方法,並在其中添加orderBy子句就足夠了,但它在symfony3中不起作用。
到acomplish這個排序依據在symfony3的唯一方法是改變buildForm方法,並添加一個query_builder選項...是這樣的:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('myProperty', EntityType::class, array(
'class' => 'MyBundle:MyPropertyClass',
'required' => false,
'query_builder' => function ($er) {
return $er->createQueryBuilder('p')->orderBy('p.order', 'ASC');
}))
但我不喜歡的COPY &粘貼此想法代碼在每個entityFormType只是爲了排序輸入元素(EntityType)。
我確定在編輯任何EntityType字段的實體時,必須有更好的/正確的方式來排列元素(再次按字母順序排列)。 symfony2提供的解決方案在這裏不起作用。
任何人都有同樣的問題?
什麼是不工作
1.- ClassRepository的findAll()或findBy()方法 在Symfony2中,只是因爲我們需要
覆蓋在分類儲存一些方法每次選擇輸入顯示了class MyClassRepository extends EntityRepository{
public function findAll(){
return $this->findBy(array(),array('myProperty' => 'ASC'));
}
/**
* @inheritdoc
*/
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
{
$orderBy = $orderBy === null ? array('myProperty' => 'ASC') : $orderBy;
return parent::findBy($criteria, $orderBy, $limit, $offset);
}
}
2:@OrderBy
氏s是在一個對象中排序一個屬性數組,我現在正在使用它,但在關係的另一端,我試圖找出的是如何對來自編輯動作/控制器的選擇輸入中的項進行排序而不必更改所有使用此屬性:: Class的formType類中的代碼(它類似於我的模型中隨處可見的枚舉類型,稍微澄清一點)
我認爲問題是,爲什麼不使用類庫製作 – Jonos