Laravel 中的雄辩关系(7)
Posted
技术标签:
【中文标题】Laravel 中的雄辩关系(7)【英文标题】:Eloquent relationship in Laravel(7) 【发布时间】:2020-10-25 13:19:42 【问题描述】:我正在使用 Laravel 进行学校的项目
学校有很多班级
班级有很多科目
科目有很多课
我的模型:学校、班级、
Subject (contain class_id),
Lesson (contain subject_id)
我的问题是:
我的最终视图(addLesson)必须包含:
选择课程、选择主题和课程详情
那么我该如何做到这一点并将课程保存到其班级和主题 我需要什么关系以及如何做到这一点
【问题讨论】:
只使用hasMany
关系一个一个
laravel.com/docs/7.x/eloquent-relationships#one-to-many
好的,我已经使用了 hasMany 关系,但我的问题是当我选择某个类时,我应该将它保存在哪里?我需要在课程模型中添加 (class_id) 列吗?
@Matrix no class_id
列到课程模型。 class_id
在您的主题模型中。和 subject_id
在您的课程模型中
我确实这样做了,但是为了在我的控制器中使用 ($classes = Myclass::all();) 在我的 AddLesson 中显示类名,并在视图中创建 foreachloop,抱歉我有一些误解
【参考方案1】:
学校.php
public function classes()
return $this->hasMany('App\Class');
类.php
public function subjects()
return $this->hasMany('App\Subject');
public function school()
return $this->belongsTo('App\School');
主题.php
public function lessons()
return $this->hasMany('App\Lesson');
public function class()
return $this->blongsTo('App\Class');
课程.php
public function subject()
return $this->belongsTo('App\Subject');
迁移
类迁移:
$table->unsignedInteger('school_id');
主题迁移:
$table->unsignedInteger('class_id');
课程迁移:
$table->unsignedInteger('subject_id');
保存类时需要保存school_id
//
保存主题时需要保存class_id
//
最后关于你的问题
保存课程时,您需要在请求中发送subject_id
然后在控制器中
$subject = Subject::find($request->subject_id);
$subject->lessons()->save([
// lesson data
]);
这会将课程保存到主题 希望这对你有用:)
【讨论】:
以上是关于Laravel 中的雄辩关系(7)的主要内容,如果未能解决你的问题,请参考以下文章