我有两个模型Student
和StudentRevision
,Student
模型与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>
请帮助解决这个问题。
答案 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