Выборочное добавление Laravel 5.0 или отношение MorphThrough

Я знаю, что тема немного запутанная. Позволь мне объяснить.

Для медицинского программного обеспечения, которое я сейчас разрабатываю, у меня есть структура данных, как показано ниже:

У пациентов есть протоколы. Протоколы содержат экзамены, предписания или отчеты, все полиморфные.

В некоторых случаях мне необходимо получить прямой доступ к обследованиям пациентов. Однако, поскольку это включает полиморфную связь между Исследованием и Протоколом, я не могу напрямую настроить метод связи в моей модели Пациент.

В качестве обходного пути я могу установить пользовательский getExaminationsAttribute и добавить к нему $appends в модели Patient. Но это вызывает целую загрузку выборки данных, когда я пытаюсь получить, например, только name Patient.

Любая помощь приветствуется.

Модель Пациент:

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');
    }

person yenerunver    schedule 19.10.2017    source источник


Ответы (1)


В качестве обходного пути столбец patients_id добавлен в подмодели таблицы Protocol (Обследования, Предписания и т. д.) и будет извлекаться через отношение hasMany.

person yenerunver    schedule 30.10.2017