如何使用 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/fluent 从单个查询中更新多行?
Laravel Eloquent - orWhereHas 方法 - 何时使用以及如何使用