Как получить список городов, в котором работает врач, через список клиник этого врача?

Существует 3 модели: Doctor, Clinic, City. Каждому городу соотносится клиника (один ко многим), врач может работать в нескольких клиниках, поэтому для этих двух моделей установлена связь многие-ко-многим и создана pivot-таблица clinic_doctor

Таблица clinics

| id | title | city_id |
|----|-------|---------|
|    |       |         |


Таблица cities

| id | name |
|----|------|
|    |      |


Таблица doctors

| id | full_name |
|----|-----------|
|    |           |


Таблица clinic_doctor

| clinic_id | doctor_id |
|-----------|-----------|
|           |           |



В App\Models\Doctor.php я описал отношение:
public function cities()
    {
        return $this->hasManyThrough(            
            City::class,
            ClinicDoctor::class,   
            'doctor_id',  // clinic_doctor table
            'id',     // cities table       
            'id',
            'clinic_id',       // clinic_doctor table
        );
    }

ClinicDoctor::class это pivot-таблица clinic_doctor. Данный метод возвращает неправильное отношение. У врача я получаю список всех клиник где он работает, и из этих клиник я должен взять поле city_id вернуть модели городов с id = city_id, но текущий мой метод возвращает города, для которых id = id из таблицы клиник (id = clinics.id). Я пытался изменить в отношении hasManyThroughполе id на city_id, но никакого результата это не дало. Где я допускаю ошибку?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
0example
@0example Автор вопроса
Решение проблемы, возможно пригодится кому. Поставил eloquent-has-many-deep. Отношение описал так:
public function cities()
    {
        return $this->hasManyDeep(
            City::class,
            ['clinic_doctor', Clinic::class],
            [           
               'doctor_id',
               'id',
               'id'
            ],
            [          
              'id',
              'clinic_id',
              'city_id'
            ]
        );
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@inFureal
В документации все написано. Не правильно написаны связывающие ключи
class Project extends Model
{
    public function deployments()
    {
        return $this->hasManyThrough(
            Deployment::class,
            Environment::class,
            'project_id', // Foreign key on the environments table...
            'environment_id', // Foreign key on the deployments table...
            'id', // Local key on the projects table...
            'id' // Local key on the environments table...
        );
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы