Yii 1.1では、このコードはデフォルトのソートで機能します:
$dataProvider = new CActiveDataProvider('article',array(
'sort'=>array(
'defaultOrder'=>'id DESC',
),
));
Yii2でデフォルトのソートを設定するにはどうすればよいですか?
コードの下で試してみましたが、結果はありませんでした:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
適切な解決策があると思う
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['topic_order'=>SORT_ASC]]
]);
または
$dataProvider->setSort([
'defaultOrder' => ['topic_order'=>SORT_DESC],
'attributes' => [...
defaultOrderには、キーが列名で値がSORT_DESC
またはSORT_ASC
である配列が含まれているため、以下のコードは機能しません。
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
正しい方法
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'topic_order' => SORT_ASC,
]
],
]);
注:クエリですでにorderBy句が指定されている場合、エンドユーザーが(並べ替え構成を介して)指定した新しい順序付け命令は、既存のorderBy句に追加されます。既存の制限およびオフセット句は、エンドユーザーからのページネーション要求によって上書きされます(ページネーション設定を介して)。
Yii2データプロバイダーガイド から詳細を学ぶことができます。
クエリで並べ替えオブジェクトを渡すことによる並べ替え
$sort = new Sort([
'attributes' => [
'age',
'name' => [
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
'default' => SORT_DESC,
'label' => 'Name',
],
],
]);
$models = Article::find()
->where(['status' => 1])
->orderBy($sort->orders)
->all();
cRUD(インデックス)があり、GridView、ListViewなどのコントローラーのデフォルトのソートを設定する必要がある場合...例
public function actionIndex()
{
$searchModel = new NewsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
// set default sorting
$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
追加する必要があります
$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];
これを試して
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$sort = $dataProvider->getSort();
$sort->defaultOrder = ['id' => SORT_ASC];
$dataProvider->setSort($sort);