与模型属性的条件有关的雄辩关系

时间:2014-12-09 14:29:54

标签: database laravel laravel-4 orm eloquent

我有两个模型StudentStudentRevisionStudent模型与hasMany模型有StudentRevision关系。我在hasMany中将Student关系定义为

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

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

表格结构是这样的。

学生 sid srid name ....

student_revisions srid sid batch ....

现在,我想与hasOne模型定义StudentRevision关系,该模型引用与current revision关联的Student。目前我已将此关系定义为:

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

但是这种关系的问题是,$this->srid在查询构建过程中不可用,并且只有在实际模型可用后才可用。{/ p>

请帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

我认为你不能把它定义为关系。但你能做的就是:

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

这样您就可以$student->current()访问它了。您甚至可以更进一步,使其更像relationship

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