语言表有:id,shortcode
comments表有id,user_id,comment,language_id(外键)
在评论模型中,我将语言定义为hasOne关系
在语言模型中,我将注释定义为hasMany关系(这是错误的?) .
在Tinker中,当我尝试执行时出现此错误:$ comment-> language() - > get():
Column not found: 1054 Unknown column 'languages.comment_id' in 'where clause' (SQL: select * from `languages` where `languages`.`comment_id` = 7 and `languages`.`comment_id` is not null)'
为什么Laravel在languages表中搜索comment_id?我似乎完全误解了一些东西 .
获取语言短代码的正确方法是什么?我认为$ comment-> language() - > shortcode应该可行 .
什么是预加载所有language_id和短代码信息而不执行重复查询的最有效方法,因为这被大量使用?
2 回答
Laravel对你的关系中的关键字做出假设 . 因为您使用hasOne关系,所以Laravel希望密钥位于languages表中,名为comment_id .
您的注释模型应使用与语言的belongsTo关系并删除hasOne . 这种方式laravel假设外键实际上在注释表中,名为language_id,就是这种情况:) .
使用belongsTo关系解决了这个问题 .
之后我可以用$ comment-> language-> shortcode访问它;
感谢大家!