首页 > 解决方案 > laravel 查询关系检查数据是否存在

问题描述

我有这样的设置,

测验模型

public function scores()
{
    return $this->hasMany('App\Score');
}

分数模型

public function quiz()
{
    return $this->belongsTo('App\Quiz');
}

public function user()
{
    return $this->belongsTo('App\User');
}

用户模型

public function scores()
{
    return $this->hasMany('App\Score');
}

一些背景,如果用户还没有对所述测验的分数,则只能由用户玩测验,我想做的是,如果用户通过分数与测验有关系,我想停止该测验在查询中返回,这是我的尝试,

$quiz = Quiz::with('questions.answers')
        ->has('scores.user', 2)
        ->whereDate('date_playable', '=', $date)
        ->first();

但是,无论用户是否有分数,这都不会返回任何测验。谁能告诉我如何只返回用户当前没有得分的测验?

标签: phplaraveleloquent

解决方案


您当前正在搜索任何用户得分不超过 2 的测验。

你需要的是whereDoesntHave代替:

$quiz = Quiz::with('questions.answers')
    ->whereDoesntHave('scores', function ($query) use ($user) {
        $query->where('user_id', $user->id);
    })
    ->whereDate('date_playable', '=', $date)
    ->first();

您要查询$user的实例在哪里。App\User


推荐阅读