发送Yii2 REST GET请求时如何按相关表字段排序 [英] How to sort by related table field when sending Yii2 REST GET request
问题描述
我想扩展基本上我有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屋!