Eloquent模型父子关系咨询:问题与题库模型关联配置疑问
关联配置存在错误,我来帮你修正
首先咱们理清楚两个模型的实际业务关系:
- 一个题库(QuestionBank)可以包含多个题目(Question),这是一对多的关联关系
- 反过来,一个题目(Question)只会属于一个题库(QuestionBank)
现在你的代码里,Question模型的belongsTo关联是正确的,但QuestionBank模型误用了belongsTo——belongsTo是用来表示「属于某个父模型」的关系,而题库作为拥有多个题目的一方,应该使用hasMany来定义关联。
修正后的模型代码
Question 模型
这个是正确的,仅建议按照PHP代码规范改成小驼峰命名方法名(可选,但更易读):
public function questionBank() { return $this->belongsTo('App\QuestionBank'); }
QuestionBank 模型
把belongsTo替换为hasMany,同样建议用小驼峰命名:
public function questions() { return $this->hasMany('App\Question'); }
额外补充说明
因为你的数据表主键不是Eloquent默认的id,不过外键QuestionBankID刚好符合Eloquent的命名规则(关联模型名+主键名),所以不需要额外指定主键和外键参数。如果之后遇到字段命名不匹配的情况,可以手动指定参数:
比如在Question模型里:
return $this->belongsTo('App\QuestionBank', 'QuestionBankID', 'QuestionBankID'); // 第二个参数是当前模型的外键字段,第三个参数是关联模型的主键字段
内容的提问来源于stack exchange,提问作者Yuvaraj Rajendran
相关产品推荐
相关产品推荐

