database – 与模型属性的where条件的雄辩关系

我有两个模型Student和StudentRevision,Student模型与StudentRevision模型有很多关系.我在Student中定义了一个hasMany关系

public function revisions()
{
    return $this->hasMany(
        'StudentRevision',
        'sid'
    );
}

我在学生表(学生模型)中有一个字段,它从student_revisions表中引用学生的当前修订版.

表结构是这样的.

学生sid srid名字….

student_revisions srid sid批次….

现在我想定义与StudentRevision模型的hasOne关系,该模型引用与Student链接的当前版本.目前我已将此关系定义为:

public function current()
{
    return $this->hasOne(
        'StudentRevision',
        'sid'
    )
    ->where('srid', $this->srid);
}

但是这种关系的问题是,$this-> srid在查询构建过程中不可用,并且只能在实际模型可用之后才能使用.

请帮助如何克服这一点.

最佳答案
我认为你不能把它定义为关系.但你能做的就是:

public function current(){
    return $this->revisions()->where('srid', $this->srid)->get();
}

这样您就可以通过$student-> current()访问它.你甚至可以更进一步,让它更像是:

public function current(){
    return $this->revisions()->where('srid', $this->srid);
}

public function getCurrent(){
    return $this->current()->get();
}

protected $appends = array('current');

这里我们为属性定义一个访问器. Laravel Docs(向下滚动到底部)

然后我们可以像这样使用它:

$student->current; // retrieves the model
$student->current(); // retrieves an instance of the query builder

转载注明原文:database – 与模型属性的where条件的雄辩关系 - 代码日志