「排序依據」字段我有一個產品管理類。產品實體與類別實體具有多對一關係,即產品與類別關聯。奏鳴曲管理員 - 在相關表格
在對產品的管理「列表」頁面,我需要按類別名稱(按字母順序),每個產品所關聯排序。
設置默認的字段進行排序很容易,如果該字段的實體本身(見Sonata admin bundle order對於如何做到這一點)。但我無法弄清楚如何按照相關表中的字段排序。
任何幫助表示讚賞。
「排序依據」字段我有一個產品管理類。產品實體與類別實體具有多對一關係,即產品與類別關聯。奏鳴曲管理員 - 在相關表格
在對產品的管理「列表」頁面,我需要按類別名稱(按字母順序),每個產品所關聯排序。
設置默認的字段進行排序很容易,如果該字段的實體本身(見Sonata admin bundle order對於如何做到這一點)。但我無法弄清楚如何按照相關表中的字段排序。
任何幫助表示讚賞。
這似乎是一個解決辦法,但它的工作原理。你必須添加一個連接覆蓋的createQuery()方法,不是指定一個默認sortBy覆蓋$ datagridValues:
<?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'));
}
}
Asume name
是實體Category
由至極要排序的屬性。你可以這樣做你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()
方法是這樣的:
public function __toString()
{
return $this->getName();
}
這曾與'KnpLabs/DoctrineBehaviors'平移' - >加( '姓名',null,數組( 'associated_property'=> 'EntityTranslation', '可排序'=> 'translations.name'))' – kunicmarko20 2016-09-05 09:55:58
我仍然需要嘗試,但它似乎正是我所需要的。謝謝。 – agentar 2012-01-16 14:40:42