【问题标题】:Laravel Schema design many to manyLaravel Schema 设计多对多
【发布时间】:2018-12-07 00:27:00
【问题描述】:

你好,我正在尝试建立中学教育的学校管理系统,我有一个 ERM 设计我想问一下 laravel 是否处理这种类型的关系多对多?如果我请修改我做错了,因为我是初学者谢谢..

ERM

【问题讨论】:

  • 我在问我连接它们的方式是否正确?并且是否会使 laravel 处理关系的方式复杂化?
  • @Grace Laravel 的 Eloquent 模型绝对可以处理多对多关系。见laravel.com/docs/5.6/eloquent-relationships#many-to-many
  • 总是使用id作为你的表主键和小写的字段名,例如你在学生表中使用了Student_ID,最好用id更改它。同样对所有表格执行此操作。外键应该是student_id
  • 好的,谢谢@rkj,我的结构如何,好吗?还是你有更好的方法?
  • 结构很好,这里connector 表充当学生表和其他表之间的数据透视表。我在答案中添加了 laravel 模型结构,只要看看,如果你认为它会相应地工作,那么你可以使用它

标签: php mysql database laravel oop


【解决方案1】:

有2个db表多对多关系

students(id,name,created_at,updated_at)
subjects(id, name, created_at,updated_at)
student_subjects(id, student_id, subject_id)

型号

class Student extends Model{
     public function subjects(){
         return $this->belongsToMany(Subject::class, 'student_subjects'); //here student_subjects is as a pivot table
     }
}

class Subject extends Model{
     public function stdents(){
         return $this->belongsToMany(Student::class, 'student_subjects'); //here student_subjects is as a pivot table
     }
}

现在保存数据

$student = Student::find(1);
$student->subjects()->attach(2); // it will save subject 2 for student 1 in `student_subjects` table.

注意:同样您可以为其他模型创建关系

详情请查看https://laravel.com/docs/5.6/eloquent-relationships#many-to-many

【讨论】:

  • @Grace 您在连接器表中有很多外键,请执行表中所需的所有外键。如果所有外键不相互依赖,那么最好将它分开。像这样student_subjectsstudent_batches...数据透视表
  • @Grace 我已经更新了答案。如果您有任何问题,请告诉我
  • 是的,我正在考虑删除一些 Fk 以节省一些麻烦呵呵谢谢@rkj 帮助我
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 2021-12-27
  • 2018-04-25
  • 2016-11-03
  • 2010-11-01
  • 2016-11-19
  • 2019-06-12
  • 1970-01-01
相关资源
最近更新 更多