我正在尝试按highscore
desc
对记录进行排序,以获取得分最高的用户。我已经尝试了很多,但仍在尝试,但未能完成任务。
以下操作有效,但可以进行排序
$GameLog = User::with(['games' => function ($q){
$q->withPivot('highscore','level');
}])->get();
我还尝试了以下方法来实现这一目标,但这还是行不通
$GameLog = User::with(['games' => function ($q){
$q->withPivot('highscore','level');
}])->groupBy(DB::raw('highscore DESC'))
->get();
我还在循环中尝试了sortBy()函数,但仍然面临问题。第一个查询返回以下结果,该结果应按highscore
{
"status": "success",
"data": [
{
"id": 1,
"name": "fasdfsad",
"games": [
{
"id": 1,
"pivot": {
"highscore": 506,
}
}
]
},
{
"id": 8,
"name": "john",
"favorite_game_id": null,
"games": [
{
"id": 1,
"pivot": {
"highscore": 2340,
}
}
]
},
{
"id": 10,
"name": "tfyuyu",
"games": [
{
"id": 1,
"pivot": {
"highscore": 100,
}
}
]
}
]
}
有人可以给我任何想法,我应该如何解决,我将不胜感激。非常感谢
为模型编辑
在Game.php
public function users()
{
return $this->belongsToMany(User::class, 'user_and_game', 'game_id', 'user_id')
->withPivot('highscore');
}
在User.php
public function games()
{
return $this->belongsToMany(Game::class, 'user_and_game', 'user_id', 'game_id');
}
如果有人请我帮忙
,我将不胜感激。答案 0 :(得分:0)
您需要为数据透视表(highscore
)创建新模型。例如:
<?php
namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;
class Highscore extends Pivot
{
public function user()
{
return $this->belongsTo(User::class);
}
public function game()
{
return $this->belongsTo(Game::class);
}
}
注意:在示例中,我们从Pivot
类而不是Model
扩展。
在控制器中,您可以像下面的示例一样对其进行排序:
$highscores = Highscore::orderByDesc('score')
->with('user', 'game')
->get();
使用自定义数据透视表时,您需要从User
和Games
表中对其进行定义。
public function users()
{
return $this->belongsToMany(User::class, 'user_and_game', 'game_id', 'user_id')
->using(Highscore::class)
->withPivot('highscore');
}