как объединить 3 таблицы в laravel с помощью eloquent hasmanythrough или hasonethrough

#javascript #php #laravel #model #relationship

#javascript #php #laravel #Модель #связь

Вопрос:

это мои таблицы выглядят так

отделы курс темы
ID ID ID
глава department_id course_id
имя_курса subject_code

в моих моделях я делаю это так, но, похоже, не работает, и я не знаю почему:

 public function departments()
{
    return $this->hasOneThrough(
        subjectlist::class,
        department::class,
        'id',
        'course_id',
        'id',
        'id'
    );
}
 

Вывод, когда я пытаюсь использовать hasOneThrough :

 {
    "id": 1,
    "department_name": "Business",
    "head": "John smith",
    "email": "smith@gmail.com",
    "contact_number": "09300282103",
    "created_at": null,
    "updated_at": null,
    "subject_list": {
        "id": 1,
        "course_id": 1,
        "subject_code": "Math1",
        "description": "math test",
        "year_type": 1,
        "price": "200.00",
        "units": "5.00",
        "created_at": null,
        "updated_at": null,
        "laravel_through_key": 1
    }
}
 

Я не хочу, чтобы результат был таким, пожалуйста, помогите мне, как это сделать:

 {
    "id": 1,
    "department_name": "Business",
    "head": "John smith",
    "email": "smith@gmail.com",
    "contact_number": "09300282103",
    "created_at": null,
    "updated_at": null,
    "subject_list": {
        "id": 1,
        "course_id": 1,
        "subject_code": "Math1",
        "description": "math test",
        "year_type": 1,
        "price": "200.00",
        "units": "5.00",
        "created_at": null,
        "updated_at": null,
        "laravel_through_key": 1
    },
    "department": {
        "id": 1,
        "department_name": "ComputerScience"
    }
}
 

Комментарии:

1. Пожалуйста, не могли бы вы показать свой код запроса модели.

Ответ №1:

Отношения между вашими таблицами похожи на Subject, поскольку у курса есть отдел, а у предмета есть отдел через курс

Отношение для вашей предметной модели

 public function Course() {
    return $this->belongsTo(Course::class);
}
public function Department() {
    return $this->hasOneThrough(Department::class, Course::class)
}
 

Связь для вашей модели курса

 public function Subject() {
    return $this->hasMany(Subject::class);
}
public function Department() {
    return $this->belongsTo(Department::class);
}
 

Отношение для вашей модели отдела

 public function Course() {
    return $this->hasMany(Course::class);
}
 

Для получения дополнительной информации обратитесь к документации laravel eloquent
relations https://laravel.com/docs/8.x/eloquent-relationships#has-one-through