Laravel Ссылка на таблицу «один ко многим» через отношение «многие ко многим» - PullRequest
0 голосов
/ 26 сентября 2018

У меня самое сложное время, и я не уверен, что проблема в отношениях или в чем.У меня есть таблица «пользователи», которая имеет отношение многие ко многим (через сводную таблицу) с таблицей «практики».Практики, однако, имеют отношение «один ко многим» со столом «докторов», в котором в практике может быть много врачей, но врач может принадлежать только к одной практике.Затем у меня также есть отношение «многие ко многим» между врачами и таблицей «пациентов», которые мне понадобятся для подсчета и сортировки запросов по дате.

В настоящее время этоукажите, где пользователь может видеть, какие у него врачи, выполнив цикл foreach для практик, а затем для $ практика-> врачей.Но это не оптимально, так как врачи не могут быть отсортированы по алфавиту и тому подобное.Может ли кто-нибудь помочь мне понять, как я могу обращаться к врачу напрямую, без необходимости использования дополнительного цикла foreach?

Это мой текущий код.Заранее спасибо!

dashboard.blade.php

@foreach ($practices as $practice)
    @foreach ($practice->doctors as $doctor)
        Doctor Name:   {{$doctor->full_name}}
        Patient Count: {{$doctor->patients()->count()}}
    @endforeach
@endforeach

DashboardController.php

$practices = User::find(Auth::user()->id)->practices();
return view('dashboard')->withPractices($practices);

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Вы можете создать прямую связь, "пропустив" таблицу practices:

class User extends Model {
    public function doctors() {
        return $this->belongsToMany(
            Doctor::class,
            'practice_user',
            null,
            'practice_id',
            null,
            'practice_id'
        );
    }
}
0 голосов
/ 27 сентября 2018

Нет предопределенных красноречивых отношений для вашего сценария.но мы можем создать отношения, используя другие отношения.

Я полагаю, что вы уже создали отношение к «практикам» в «Модели пользователя» и «докторам» в «Модели практики».

// in User Model
public function practices()
{
    return $this->belongsToMany(Practices::class);
}

// in Practice Model
public funcion doctors()
{
    return $this->hasMany(Doctor::class);
}

Вам нужны отношения «доктора» в «Модели пользователя».

// in User Model
public function doctors()
    $this->load(['practices.doctors => function($query) use (&$relation) {
        $relation = $query;
    }]);

    return $relation;
}

теперь вы можете получить «врачей» для такого «пользователя», как этот.

$doctors = User::find(Auth::user()->id)->doctors;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...