Laravel搜索结果

时间:2016-08-27 17:51:33

标签: laravel

我的应用可以选择与其他玩家对战。 为了使玩家与另一个玩家匹配,我在score表中创建了一个名为users的数据库字段。

我的目标是将用户与已经SEARCHING进行战斗的另一位随机用户进行匹配。两个用户必须保持+ -100分差异。

例如,得分为100的用户可以与得分为0-200的玩家对战。

我正在尝试搜索所有可用选项,但无法知道如何执行此操作。

目前,我只是以SEARCHING模式输出第一个。

$pvp = PvpBattle::where('mode','=','SEARCHING')
        ->first();

我如何获取关联PvpBattleplayer1_id的得分差为+ - 100的所有$this->me->score个对象?

3 个答案:

答案 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()
;