发送Yii2 REST GET请求时如何按相关表字段排序 [英] How to sort by related table field when sending Yii2 REST GET request

查看:148
本文介绍了发送Yii2 REST GET请求时如何按相关表字段排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想扩展基本上我有users端点.但是我也从相关的profiles表中返回数据.我没有使用个人资料进行扩展,我一直希望将其退回.所以我有这样的字段方法:

Basically I have users endpoint. But I am also returning data from the related profiles table. I am not expanding with profiles, I always want to return it. So I have fields method like this:

public function fields()
{
    $fields = parent::fields();
    $fields[] = 'profile';
    return $fields;
}

当我按profile.created_at字段和user.status进行GET请求和需求排序时,它没有按profile.created_at排序.

When I do GET request and demand sorting by profile.created_at field and user.status, it does not sort by profile.created_at.

获取v1/users?sort = -profile.created_at,状态

GET v1/users?sort=-profile.created_at,status

这可以通过某种方式实现吗?

Can this be achieved somehow ?

这是我当前的代码:

/** @var $query ActiveQuery */
$query = User::find();

// get data from profile table
$query->innerJoinWith('profile');

// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'sort'  => ['defaultOrder' => ['id' => SORT_DESC]],
    'pagination' => [
        'pageSize' => 10,
    ],
]);

return $dataProvider;

推荐答案

您已覆盖ActiveDataProvider的"sort"参数.为了保持Sort对象的默认行为并更改defaultOrder属性,请创建一个实例,例如:

You have overridden 'sort' parameter of ActiveDataProvider. To keep default behaviour of Sort object and change defaultOrder property, create an instance, such as:

$sort = new \yii\data\Sort([
    'attributes' => [
        'profile.created_at',
    ],
    'defaultOrder' => ['id' => SORT_DESC],
]);

// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'sort'  => $sort,
    'pagination' => [
        'pageSize' => 10,
    ],
]);

这篇关于发送Yii2 REST GET请求时如何按相关表字段排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆