我的应用可以选择与其他玩家对战。
为了使玩家与另一个玩家匹配,我在score
表中创建了一个名为users
的数据库字段。
我的目标是将用户与已经SEARCHING
进行战斗的另一位随机用户进行匹配。两个用户必须保持+ -100分差异。
例如,得分为100的用户可以与得分为0-200的玩家对战。
我正在尝试搜索所有可用选项,但无法知道如何执行此操作。
目前,我只是以SEARCHING
模式输出第一个。
$pvp = PvpBattle::where('mode','=','SEARCHING')
->first();
我如何获取关联PvpBattle
与player1_id
的得分差为+ - 100的所有$this->me->score
个对象?
答案 0 :(得分:0)
尝试此代码
WhereHas('用户')是PvpBattle和用户之间的用户关系
$minScore = $this->me->score - 100;
$maxScore = $this->me->score + 100;
$pvp = PvpBattle::where('mode','=','SEARCHING')
->WhereHas('users', function ($query) use ($minScore, $maxScore){
$query->Where(function ($subQuery) use ($minScore, $maxScore){
$subQuery->orWhere('score', '<=', $maxScore)
->orWhere('score', '>=', $minScore);
});
})
->first();
答案 1 :(得分:0)
首先找到玩家1的得分$scoreA
或使用$this->me->score
然后
$opp_list=PvpBattle::where('mode','=','SEARCHING')->Where(function($query)
{
$query->where('score', '>=', $scoreA -100)
->orwhere('score', '<=', $scoreA+100);
})
->get();
这使所有玩家处于模式搜索状态得分+ -100。 first()返回表中的第一个结果。
您如何同时处理指向同一用户的两个请求?
结果不应返回用户A.
将->where('user_id', '!=', $user_id)
添加到查询
答案 2 :(得分:0)
使用users
表的联接按相关用户的分数过滤结果。
$pvps = PvpBattle::join('users', 'users.id', '=', 'pvpbattle.user_id')
->where('pvpbattle.mode','=','SEARCHING')
->where('users.score', '>=', $this->me->score - 100)
->where('users.score', '<=', $this->me->score + 100)
->get()
;