php - Laravel Eloquent 2 个表与 1 个表相关的关系

标签 php mysql laravel eloquent

我的数据库中有 3 个表。候选人、评委和分数。

现在,我想做的是获取、查询或显示尚未被评委评分的候选人。

在基本的 php 中我们可以使用 sql 查询来查询

从candidateId='1'和judgeId='2'的分数中选择*

任何人都可以帮助我如何在 Laravel Eloquent 关系上做到这一点吗?

最佳答案

对于这个简单的查询,你不需要 Eloquent Relationship,只需使用 Model 即可:

$scores = Score::where(['candidateId' => 1, 'judgeId' => 2])->get();

但是如果您想使用关系来做到这一点,您必须首先在分数模型中定义关系:

class Score extends Model {
    protected $table = 'scores';
    public function candidate() {
        return $this->belongsTo(Candidate::class, 'candidateId');
    }
    public function judge() {
        return $this->belongsTo(Judge::class, 'judgeId');
    }
}

然后您可以通过关系进行查询:

$candidateId = 1;
$judgeId = 2;
$scores = Score::whereHas('candidate', function($query) use ($candidateId) {
    $query->where('id', $candidateId);
})->whereHas('judge', function ($query) use ($judgeId) {
    $query->where('id', $judgeId);
})->get();

更新#1: 如果您想获得每个候选人的分数,您可以在候选人中定义关系:

class Candidate extends Model {
    protected $table = 'candidates';
    public function scores() {
        return $this->hasMany(Score::class, 'candidateId');
    }
}

然后找到候选人及其分数:

$candidate = Candidate::find(1);
$scores = $candidate->scores;

您可以将 $candidate 传递给您的 View 并在 View 中获取分数,但不建议在您的 View 中进行查询。我的意思是不要在 View 内调用 Candidate::find(1),但 $candidate->scores 可以在 View 内完成。

关于php - Laravel Eloquent 2 个表与 1 个表相关的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47218527/

相关文章:

MySQL 删除引擎为内存的表

php - 在一页或所有页面上写 session 开始?

java - 从 GCE 实例上的 Tomcat webapp 连接到第二代 MySQL

php - 未找到 Zend Framework 2.0 接口(interface)

javascript - 如何在 elfinder 插件(文件管理器插件)中获取上传前事件

php - Laravel 如何做这个关系查询

laravel - 返回数组 Api 资源对象时分页

laravel - 测试检查用户是否已登录 laravel

php - 如何对撇号进行编码,以便可以在 mysql 中搜索它?

php - 结果从数据库中可用的确切行返回减去 1(负 1)的值