我的数据库中有3个表。候选人,评委和分数。
现在,我想做什么来获取或查询或显示评委尚未评分的候选人。
在基本的php我们可以查询使用sql查询,如 select * from scores where candidateId='1' and judgeId='2'
任何人都可以帮我解决如何在Laravel Eloquent Relationship上做到这一点吗?
答案 0 :(得分:2)
对于这个简单的查询,您不需要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传递给您的视图并在视图中获得分数,但不建议您在视图中进行查询。我的意思是不要在你的视图中调用Candidate :: find(1),但可以在视图内完成$ candidate->分数。