Laravel 5.0 选择性附加或 MorphThrough 关系
Laravel 5.0 Selective Append or MorphThrough Relation
我知道这个主题有点令人困惑。让我解释一下。
我目前正在开发的一个医疗软件,我的数据结构如下:
患者有协议。 方案有检查、处方或报告 s,都是多态的。
在某些情况下,我必须直接访问患者的检查。但是,由于这包括 Examination 和 Protocol 之间的多态关系,我无法直接在我的 Patient[= 中设置关系方法51=]型号。
作为解决方法,我可以设置自定义 getExaminationsAttribute
并在 Patient 模型中附加 $appends
。但是,当我尝试获取例如 Patient.
的 name
时,这会导致整个数据获取负载
感谢任何帮助。
患者型号:
class Patient extends Model{
protected $table = 'patients';
public function protocols(){
return $this->hasMany('App\Protocol', 'patients_id', 'id');
}
protected $appends = ['examinations'];
public function getExaminationsAttribute()
{
$examinations = array();
$this->protocols->each(function($protocol) use (&$examinations){
$protocol->examinations->each(function($examination) use (&$examinations){
$examinations[] = $examination->toArray();
});
});
return $examinations;
}
协议型号:
class Protocol extends Model{
protected $table = 'protocols';
public function patient(){
return $this->belongsTo('App\Patient', 'patients_id', 'id');
}
public function examinations()
{
return $this->morphedByMany('App\Examination', 'protocolable');
}
考试型号:
class Examination extends Model{
protected $table = 'examinations';
public function protocols()
{
return $this->morphToMany('App\Protocol', 'protocolable');
}
作为解决方法,patients_id
列已添加到 Protocol table 的子模型中(Examinations,处方等)并将通过hasMany
关系获取。
我知道这个主题有点令人困惑。让我解释一下。
我目前正在开发的一个医疗软件,我的数据结构如下:
患者有协议。 方案有检查、处方或报告 s,都是多态的。
在某些情况下,我必须直接访问患者的检查。但是,由于这包括 Examination 和 Protocol 之间的多态关系,我无法直接在我的 Patient[= 中设置关系方法51=]型号。
作为解决方法,我可以设置自定义 getExaminationsAttribute
并在 Patient 模型中附加 $appends
。但是,当我尝试获取例如 Patient.
name
时,这会导致整个数据获取负载
感谢任何帮助。
患者型号:
class Patient extends Model{
protected $table = 'patients';
public function protocols(){
return $this->hasMany('App\Protocol', 'patients_id', 'id');
}
protected $appends = ['examinations'];
public function getExaminationsAttribute()
{
$examinations = array();
$this->protocols->each(function($protocol) use (&$examinations){
$protocol->examinations->each(function($examination) use (&$examinations){
$examinations[] = $examination->toArray();
});
});
return $examinations;
}
协议型号:
class Protocol extends Model{
protected $table = 'protocols';
public function patient(){
return $this->belongsTo('App\Patient', 'patients_id', 'id');
}
public function examinations()
{
return $this->morphedByMany('App\Examination', 'protocolable');
}
考试型号:
class Examination extends Model{
protected $table = 'examinations';
public function protocols()
{
return $this->morphToMany('App\Protocol', 'protocolable');
}
作为解决方法,patients_id
列已添加到 Protocol table 的子模型中(Examinations,处方等)并将通过hasMany
关系获取。