2017-03-23 33 views
1

我有一个属于章节的策略表。当我在网格视图中查看策略时,我希望默认订单成为章节标题中的策略标题。我看到如何设置排序属性来启用它,但我无法弄清楚如何将defaultOrder设置为基于章节标题和策略标题。当我尝试将policy.title设置为defaultOrder设置中的属性时,我收到错误消息。Yii2排序对象defaultOrder

回答

1

如果政策是模型类策略表中有一个名为“章”和chapter_id现场联动的章节表,如关系:

public function getChapter() 
{ 
    return $this->hasOne(Chapter::className(), ['chapter_id' => 'chapter_id']); 
} 

现在你建立查询对象的政策与章加入:

$query = Policy::find() 
->joinWith(['chapter']); 

$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
    'sort'=> ['defaultOrder' => ['chapter.title'=>SORT_ASC, 'policy.title' => SORT_ASC]] 
]); 
0

我不能让法布里奇奥的回答工作,因为我的章表policy_chapter,不只是章,所以是不一样的关系名称。当我尝试使用关系名称时,出现错误。我终于搞清楚了,你必须使用相关表的名称,而不是关系,并将它们添加为属性。例如:

$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
    'pagination' => ['pageSize' => 50], 
    'sort' => [ 
     'defaultOrder' => ['policy_chapter.sort' => SORT_ASC,'policy_chapter.title' => SORT_ASC], 
     'enableMultiSort' => true, 
     'attributes' => [ 
      'id' => [ 
       'asc' => ['policy.id' => SORT_ASC], 
       'desc' => ['policy.id' => SORT_DESC], 
       'default' => SORT_ASC 
      ], 
      'chapter_id' => [ 
       'asc' => ['policy_chapter.sort' => SORT_ASC,'policy_chapter.title' => SORT_ASC], 
       'desc' => ['policy_chapter.sort' => SORT_DESC,'policy_chapter.title' => SORT_DESC], 
       'default' => SORT_ASC, 
      ], 
      'reference' => [ 
       'asc' => ['reference' => SORT_ASC], 
       'desc' => ['reference' => SORT_DESC], 
       'default' => SORT_ASC 
      ], 
      'title' => [ 
       'asc' => ['policy.title' => SORT_ASC], 
       'desc' => ['policy.title' => SORT_DESC], 
       'default' => SORT_ASC 
      ], 
      'policy_chapter.sort', 
      'policy_chapter.title', 
     ], 
    ], 
]); 

使用关系名称或忽略这些属性,就会得到错误。我在写

'defaultOrder' => ['policy_chapter.sort' => SORT_ASC,'policy_chapter.title' => SORT_ASC], 

和Yii的却高兴不起来之前