2012-01-12 26 views
7

मेरे पास एक उत्पाद व्यवस्थापक वर्ग है। उत्पाद इकाई के पास एक श्रेणी इकाई के साथ एक से अधिक संबंध हैं, यानी एक उत्पाद एक श्रेणी से जुड़ा हुआ है।सोनाटा व्यवस्थापक - संबंधित तालिका में "ऑर्डर बाय" फ़ील्ड

उत्पादों के लिए व्यवस्थापक "सूची" पृष्ठ में, मुझे श्रेणी के नाम (वर्णानुक्रम) द्वारा क्रमबद्ध करने की आवश्यकता है कि प्रत्येक उत्पाद से जुड़ा हुआ है।

फ़ील्ड को स्वयं पर सेट करने के लिए डिफ़ॉल्ट फ़ील्ड को सेट करना आसान है (यह देखने के लिए Sonata admin bundle order देखें)। लेकिन मैं यह नहीं समझ सकता कि किसी संबंधित तालिका में किसी फ़ील्ड द्वारा सॉर्ट करना है।

किसी भी मदद की सराहना की जाती है।

उत्तर

6

ऐसा लगता है कि यह एक कामकाज है, लेकिन यह काम करता है।

<?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

मुझे अभी भी इसे आजमाने की ज़रूरत है, लेकिन ऐसा लगता है कि मुझे वही चाहिए। धन्यवाद। – agentar

5

मान name जो द्वारा इकाई Category की संपत्ति आप क्रमबद्ध करना चाहते है: आप एक createQuery अधिभावी में शामिल होने के() विधि को जोड़ने के लिए, की तुलना में आवंटित एक डिफ़ॉल्ट sortBy $ datagridValues ​​अधिभावी की है। आप आप ProductAdmin.php

protected function configureListFields(ListMapper $listMapper) 
{ 

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

में इस तरह से आप सूची के शीर्ष लेख, सोनाटा द्वारा उत्पन्न में आदेश देने की लिंक का लाभ उठाने ऐसा कर सकते हैं।

संपादित

आप भी उत्पादों की सूची में श्रेणी के नाम पर एक लिंक जल्दी Category इकाई को संपादित करने के लिए यह सोचते हैं आप एक CategoryAdmin वर्ग बनाया है चाहते हैं, तो आप इस तरह अपने कोड लिखना चाहिए:

:

protected function configureListFields(ListMapper $listMapper) 
{ 

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

और अपने Category क्लास में __toString() विधि इस तरह लागू करना चाहिए 0

+0

यह 'KnpLabs/DoctrineBehaviors' अनुवाद योग्य '-> जोड़ें (' name ', null, array (' related_property '=>' EntityTranslation ',' sortable '=>' translation.name ') के साथ काम करता है) '' – kunicmarko20

संबंधित मुद्दे