2012-01-12 14 views
7

Ürün yönetici sınıfım var. Ürün varlık, bir Kategori varlık ile bire bir ilişki içerisindedir, yani bir ürün bir kategori ile ilişkilidir.Sonata admin - ilgili tablodaki "order by" alanı

Ürünler için admin "liste" sayfasında, her ürünün ilişkili olduğu kategori adına göre (alfabetik olarak) sıralamalıyım.

Tarlanın kendisi üzerinde ise, sıralanacak varsayılan alanı ayarlamak kolaydır (bunun nasıl yapılacağı için bkz. Sonata admin bundle order). Ancak, ilgili bir tabloda bir alanın nasıl sıralanacağını anlayamıyorum.

Herhangi bir yardım için teşekkür ederiz.

cevap

6

Bu bir çözüm gibi görünüyor, ancak işe yarıyor.

<?php 
use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery; 

class ExpenseAdmin extends Admin 
{ 
    protected $datagridValues = array(
     '_page'  => 1, 
     '_sort_order' => 'ASC', // sort direction 
     '_sort_by' => 'c.name' // field name 
    ); 

    /** 
    * @return \Sonata\AdminBundle\Datagrid\ProxyQueryInterface 
    */ 
    public function createQuery($context = 'list') 
    { 
     $query = parent::createQuery($context); 

     return new ProxyQuery($query 
      ->join(sprintf('%s.category', $query->getRootAlias()), 'c')); 
    } 
} 
+0

Hala denemem gerek ama tam ihtiyacım olan şey bu. Teşekkür ederim. – agentar

5

Asume name sıralamak istediğiniz wich tarafından varlık Category malıdır: Sen $ datagridValues ​​geçersiz kılma varsayılan bir SortBy atamak yerine, createQuery geçersiz kılma katılmak() yöntemi eklemek gerekir. Sen ProductAdmin.php

protected function configureListFields(ListMapper $listMapper) 
{ 

    $listMapper->add('category.name', null, array(
      'sortable' => true, 
    )); 
    ... 
} 

size Sonata tarafından oluşturulan listenin başlığında sipariş bağlantıları kaldıraç Bu şekilde bu yapabilirsiniz. Ayrıca bir CategoryAdmin sınıf oluşturduk varsayarak hızla Category varlık düzenlemek için ürünler listesinde kategori adına bir bağlantı istiyorsanız

Düzenleme

, bu gibi kod yazmak gerekir:

:
protected function configureListFields(ListMapper $listMapper) 
{ 

    $listMapper->add('category', null, array(
      'sortable' => 'category.name', 
    )); 
    ... 
} 

Ve Category sınıfında

böyle __toString() yöntemi uygulamalıdır 0
+0

Bu "KnpLabs/DoctrineBehaviors" ile tercüme edilebilir -> add ('name', null, array ('related_property' => 'EntityTranslation', 'sortable' => 'translations.name')) – kunicmarko20

İlgili konular