Php Laravel Elountent-如何定义这种关系:Comment::language()->;名称

Php Laravel Elountent-如何定义这种关系:Comment::language()->;名称,php,laravel,eloquent,Php,Laravel,Eloquent,语言表有:id,shortcode 注释表具有id、用户id、注释、语言id(外键) 在注释模型中,我将语言定义为hasOne关系 在语言模型中,我将注释定义为hasMany关系(这是错误的吗?) 在Tinker中,当我尝试执行时,会出现以下错误:$comment->language()->get(): 为什么Laravel在语言表中搜索注释id?看来我完全误解了什么 获取语言短代码的正确方法是什么?我认为$comment->language()->shortcode应该可以工作 什么是预加载所

语言表有:id,shortcode

注释表具有id、用户id、注释、语言id(外键)

在注释模型中,我将语言定义为hasOne关系

在语言模型中,我将注释定义为hasMany关系(这是错误的吗?)

在Tinker中,当我尝试执行时,会出现以下错误:$comment->language()->get():

为什么Laravel在语言表中搜索注释id?看来我完全误解了什么

获取语言短代码的正确方法是什么?我认为$comment->language()->shortcode应该可以工作


什么是预加载所有语言id和快捷码信息而不执行重复查询的最有效方法,因为这经常被使用?

Laravel对您的关系中的关键名称进行假设。由于使用hasOne关系,Laravel希望键位于languages表中,名为comment\u id


您的评论模型应该使用belongsTo与语言的关系,并删除hasOne。通过这种方式,laravel假设外键实际上在comments表中,名为language_id,即:)。

使用belongsTo关系解决了问题

之后,我可以通过$comment->language->shortcode访问它


谢谢大家

注释模型应该有一个belongsTo关系,而不是hasOne。此外,表格应命名为注释和语言,而不是注释和语言。谢谢。我还有一个问题:$comment->language()->get()可以工作,但是$comment->language()->shortcode不能。什么是正确的方法?有2件事要考虑的关系:1。如果使用关系的函数版本:$comment->language();你总是收到关系本身。这样可以扩展查询。对belongsTo不是很有用,但对hasmone很有用。2.如果使用关系的成员版本:$comment->language;你与对象本身对话。或者,在许多关系中,您会得到一个Illumb\Support\Collection。考虑到这些选项,您始终可以做出最佳决策:)如果我的答案有帮助,我建议您点击该答案按钮;)是的,这很有帮助。我太新了,不能投票给你(它还不会登记投票)。但我感谢你的答复。“我已经十年没有编程了,事情发生了很大变化。”汉斯。因为你是这个问题的作者,你实际上可以点击灰色的复选标记,将这个答案标记为正确的,给你的撒玛利亚人一些当之无愧的名声。
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)'