php - Laravel Eloquent 排序查询

标签 php mysql json laravel eloquent

我正在尝试根据事件表中用户距离的组合值对用户表中的用户进行排序。以下代码返回类似的内容。

我正在尝试找出如何按 sum_distance 值对这些数据进行排序。 另外,我似乎无法弄清楚如何仅显示 sum_distance 数据,因为 $item->sum_distance 不返回任何内容。 (因为我猜它嵌套在某个地方)

用户模型

protected $fillable = ['strava_id', 'first_name', 'last_name', 'sex', 'avatar', 'email', 'token'];

public function sumDistance()
{
    return $this->hasMany('App\Activity')
        ->selectRaw('user_id, sum(distance) as sum_distance')
        ->groupBy('user_id')
        ->orderBy('sum_distance', 'desc');
}

事件模型

protected $fillable = ['activityId', 'user_id', 'name', 'distance', 'moving_time', 'start_date'];

Controller

public function index(Strava $strava)
{

    $list = User::with('sumDistance')->get();

    return view('leaderboard', compact('list'));

}

查看

<ul>
    @foreach($list as $item)
        <li>{{ $item }}</li><br>
    @endforeach
</ul>

最佳答案

您无法将相关模型作为 SQL 查询的一部分对用户结果进行排序,因为 eloquent 在单独的查询中获取关系。您当然可以进行连接,但这将违背使用 ORM 的目的。您可以执行以下操作:

public function sumDistance()
{
    return $this->hasMany('App\Activity')
        ->selectRaw('user_id, sum(distance) as sum_distance')
        ->groupBy('user_id');
}

得到结果后进行排序:

public function index(Strava $strava)
{

    $list = User::with('sumDistance')->get()->sort(function ($a,$b) {
           return $a->sumDistance->sum_distance <=> $b->sumDistance->sum_distance; 
    });

    return view('leaderboard', compact('list'));

}

关于php - Laravel Eloquent 排序查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915184/

相关文章:

php - 在哪里可以找到有关text()xpath查询语法的一些官方文档?

php - sudo composer install 与 composer install

mysql - 运行总计的 SQL 更新语法

mysql - 修改mysql数据库地址

mysql - 仅当数字在mysql中不圆时如何获取小数

python - 在while循环中使用线程会导致LED闪烁的问题

PHP行删除

php - 一次执行多个 SQL 查询

javascript - 谷歌图表 "Table has no columns"

c# - PowerShell 二进制模块程序集依赖性错误