为啥我的多对一 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 关系不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server Analysis Services 中的多对多关系;第二个多对多关系不起作用

Laravel Nova 多态多对多关系不起作用

Laravel 多对多关系不起作用

Laravel 8 多对多关系不起作用(没有抛出错误)

博客上的 Laravel 5.1 多对多标签不起作用

为啥我在 Laravel 中简单的 belongsTo 关系不起作用?