我正在尝试根据事件表中用户距离的组合值对用户表中的用户进行排序。以下代码返回类似的内容。
我正在尝试找出如何按 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/