如何使用 eloquent hasmanythrough 或 hasonethrough 在 laravel 中加入 3 个表

Posted

技术标签:

【中文标题】如何使用 eloquent hasmanythrough 或 hasonethrough 在 laravel 中加入 3 个表【英文标题】:how to join 3 tables in laravel using eloquent hasmanythrough or hasonethrough 【发布时间】:2022-01-10 20:28:06 【问题描述】:

这是我的桌子的样子

departments course subjects
id id id
head department_id course_id
course_name 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】:

你的表之间的关系就像 作为课程的主题 课程有一个部门 和科目通过课程有一个部门

主题模型的关系

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 关系文档 https://laravel.com/docs/8.x/eloquent-relationships#has-one-through

【讨论】:

以上是关于如何使用 eloquent hasmanythrough 或 hasonethrough 在 laravel 中加入 3 个表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Eloquent 模型获取多个表列名

如何在使用 eloquent 时排除某些列

如何使用 eloquent/fluent 从单个查询中更新多行?

Laravel Eloquent - orWhereHas 方法 - 何时使用以及如何使用

Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?

如何在 Eloquent 查询关系中使用模型的属性