Laravel 5.0 选择性附加或 MorphThrough 关系

Laravel 5.0 Selective Append or MorphThrough Relation

我知道这个主题有点令人困惑。让我解释一下。

我目前正在开发的一个医疗软件,我的数据结构如下:

患者协议方案检查处​​方报告 s,都是多态的。

在某些情况下,我必须直接访问患者检查。但是,由于这包括 ExaminationProtocol 之间的多态关系,我无法直接在我的 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关系获取。