【问题标题】:Laravel sortBy not having any affectLaravel sortBy 没有任何影响
【发布时间】:2017-08-01 22:39:35
【问题描述】:

我的用户模型上有一个自定义属性,用于计算其他一些表的长度并返回一个整数值:

public function GetCurrentQueueLengthAttribute()
{
    // return int
}

然后我有一个 API 端点,它返回一个包含所有用户的“团队”(简单的 Spark 枢轴)

public function show($teamId)
{
    $query = Team::query();
    $query->with('users')->where('id', $teamId);
    $team = $query->first();

    return $team->users->sortBy('currentQueueLength');

    return $team;
}

问题是返回的数据没有改变顺序。没有错误,只是每次用户的顺序相同。

我有什么遗漏吗?

【问题讨论】:

  • @ka_lin 似乎更像是一个后续行动,而不是一个骗子
  • @user3158900 很遗憾,我错了:(
  • $team->users()->sortBy('currentQueueLength') 你需要强制 laravel 进行查询
  • sortBy 不是一个能言善辩的用户,请尝试更改为return $team->users()->sortBy('currentQueueLength'); 这将首先获取结果而不是对结果集进行排序

标签: laravel eloquent


【解决方案1】:

sortBy函数不要被orderBy函数弄错了,第一个对集合进行排序,第二个改变查询生成器的sql。

为了能够使用sortBy 函数,首先需要检索集合。这些函数仍然可以通过使用链接:

return $team->users()->sortBy('currentQueueLength');

如果您愿意为排序编写自定义 sql 查询,也可以选择使用orderByRaw

【讨论】:

  • 我认为这不会起作用,因为我们不想对数据库进行排序,因为这是一个自定义属性。数据库不知道currentQueueLength。我们想先获取集合并使用 PHP 对其进行排序。
猜你喜欢
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 2020-05-10
  • 2013-04-09
  • 2020-01-09
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多