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)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 多对多中的雄辩关系通过

Laravel 雄辩的关系多对一不起作用

如何从 hasManyThrough 雄辩关系返回 Laravel 中的单个模型

关系数据库中的 Laravel 雄辩分页调用

laravel 雄辩,只检查单对多关系中的第一项

Laravel 5.6 |雄辩的一对多关系