Подскажите как отсортировать данные по виртуальному полю.
Имеем:
Код: Выделить всё
<?= GridView::widget([
'dataProvider' => $dataProvider,
// 'filterModel' => $searchModel,
'columns' => [
[
'attribute' => 'company_name',
'format' => 'raw',
'value' => function($data){
return Html::a($data->company_name, ['view', 'id' => $data->id],
['style' => 'font-size: 20px; font-weight: bold;'])."<br>".
Html::a("Edit", ['update', 'id' => $data->id])." ".
Html::a("Delete", ['delete', 'id' => $data->id],
[
'style' => 'color: red',
'title' => Yii::t('app', 'lead-delete'),
'alt' => 'Delete',
'aria-label'=> 'Delete' ,
'data-confirm'=> 'Are you sure you want to delete this item?' ,
'data-method'=> 'post' ,
]);
}
],
'phone',
'email',
'fullAddress',
'planInfo.name:raw:Plan Name',
[
'attribute' => 'payment',
'format' => 'raw',
'label' => 'Payment',
'value' => function($data)
{
if($data->isFreeAndCheck() || $data->isNotFreeAndCheck()){
return '<i class="fa fa-check" style="font-size: 20px; color: green"></i>';
}
if($data->isFreeAndPause()){ return $data->planInfo->description;}
if($data->isNotFreeAndPause()){ return Html::button('Pay', ['class' => 'btn btn-warning']);}
return '<i class="fa fa-bomb" style="font-size: 20px; color: red"></i> Error';
}
],
],
'tableOptions' => [
'class' => 'table table-borderless table-hover'
],
]); ?>
Как сделать сортировку по такому полю
ActiveDataProvider:
Код: Выделить всё
public function allCompanies(): ActiveDataProvider
{
return new ActiveDataProvider([
'query' => $this->findByClientID()->leftJoin('plans', '`plans`.`id` = `companies`.`plan`'),
'pagination' => [
'pageSize' => 10
],
]);
}
public function setSort(ActiveDataProvider $dataProviderCompanies): void
{
$dataProviderCompanies->setSort([
'attributes' => [
'company_name',
'phone',
'email',
'fullAddress' => [
'asc' => ['country' => SORT_ASC, 'state' => SORT_ASC, 'city' => SORT_ASC, 'address' => SORT_ASC],
'desc' => ['country' => SORT_DESC, 'state' => SORT_DESC, 'city' => SORT_DESC, 'address' => SORT_DESC],
'default' => SORT_DESC,
'label' => 'Full Address',
],
'planInfo.name' => [
'asc' => ['plans.name' => SORT_ASC],
'desc' => ['plans.name' => SORT_DESC],
],
]
]);
}