为啥我的多对一 laravel 关系不起作用?
Posted
技术标签:
【中文标题】为啥我的多对一 laravel 关系不起作用?【英文标题】:Why my many-to-one laravel relationship does not work?为什么我的多对一 laravel 关系不起作用? 【发布时间】:2020-09-28 16:19:27 【问题描述】:我知道这个问题已被问过很多次,但没有一个解决方案适用于我的问题。 我在处理一对多关系时遇到了问题(一个文件可以有一个状态,但状态可以分配给多个文件),当我尝试这样使用它时,它总是返回 null:
$file = File::orderBy('updated_at', 'DESC')->first();
return $file->status;
当我尝试使用这种关系时:
$file = File::orderBy('updated_at', 'DESC')->with('status')->first();
return $file->status;
我收到一个错误
Call to undefined relationship [status] on model [App\File]
我确定一切设置正确,请参阅下面的模型 文件.php
public function status()
return $this->belongsTo('App\Status', 'status_id');
“文件”表
“状态”表:
此外,反向关系有效(当我尝试获取特定状态的文件时)
public function files()
return $this->hasMany('App\File', 'status_id'); //This works
【问题讨论】:
把函数状态的名字改成getstatus之类的就不会报错了。永远不要将类名作为函数名,它将成为构造方法。 执行这个命令`composer dump-autoload` @A.ANoman 非常感谢。感谢您的建议,我能够找到问题所在。我有一个名为“File_x.php”的备份“File.php”版本,该文件被用作文件模型而不是 File.php,这是一个非常愚蠢的错误,但也许这种情况也可能有助于某人找到他们的问题。跨度> 【参考方案1】:Call to undefined relationship [status] on model [App\File]
由于类名和函数名相同而导致的错误。当你制作这种函数时,它就像构造方法函数一样工作。
public function filestatus()
return $this->belongsTo('App\Status', 'status_id');
$file = File::orderBy('updated_at', 'DESC')->with('filestatus')->first();
return $file->status;
【讨论】:
仍然收到相同的错误,只是现在使用文件状态而不是状态......调用模型 [App\File] 上的未定义关系 [filestatus]。 laravel 是否可能期望表“状态”被称为其他名称?以上是关于为啥我的多对一 laravel 关系不起作用?的主要内容,如果未能解决你的问题,请参考以下文章