首页 文章

Laravel Eloquent - 如何定义这样的关系:Comment :: language() - > name

提问于
浏览
1

语言表有: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 回答

  • 1

    Laravel对你的关系中的关键字做出假设 . 因为您使用hasOne关系,所以Laravel希望密钥位于languages表中,名为comment_id .

    您的注释模型应使用与语言的belongsTo关系并删除hasOne . 这种方式laravel假设外键实际上在注释表中,名为language_id,就是这种情况:) .

  • 1

    使用belongsTo关系解决了这个问题 .

    之后我可以用$ comment-> language-> shortcode访问它;

    感谢大家!

相关问题