雄辩的一对多关系在生产服务器上不起作用

Posted

技术标签:

【中文标题】雄辩的一对多关系在生产服务器上不起作用【英文标题】:Eloquent one to many relationship is not working on production server 【发布时间】:2020-09-25 17:26:13 【问题描述】:

我知道这个问题之前已经被问过很多次了,但是我已经在 *** 上搜索了过去 3 个小时的答案,但没有成功,在我的情况下没有一个解决方案有效。我的模型关系在 localhost 上运行良好,但只要将我的更改推送到生产服务器(使用相同的配置),模型之间的关系就会停止工作。

这是我的 File.php 模型与 Language.php 模型的关系

public function language()

  return $this->belongsTo('App\Language', 'language_id', 'id');

我什至指定了链接它们的键。

这就是问题所在。在我的本地机器上,这段代码一切正常

$files = File::orderBy('updated_at', 'DESC')->get();
return $files[0]->language;

我得到以下结果

现在,当我在生产服务器上执行相同操作时,我得到空结果。 你可能会说问题出在数据库上的记录上,其实不是。 这是一个证明: 生产数据库的文件记录

这是语言表

外键列的数据类型(languages表数据类型中的language_id和id列均为无符号大整数,长度为20)。

这不仅仅是语言模型的问题,我还有一些其他模型与相同的逻辑相关联,尽管它们在本地主机上工作,但它们都没有在生产中工作。

顺便说一句,在本地主机上的 phpmyadmin 中,我可以根据外键连接选择值,但是在服务器上我不能这样做:

本地主机:

服务器:

任何帮助将不胜感激

编辑:我发现表引擎存在问题,必须设置为 innoDB(检查答案),以便修复数据库问题。但是,我仍然无法让 Laravel 识别这些关系。

【问题讨论】:

$files 是一个集合.....返回 $files[0] 不是 100% OK。你应该这样做....$files->first()->language. 快速提示:安装clockwork -> 在生产中启用它(临时) -> 查看在后台执行了哪些查询(本地/生产) -> 对两个数据库服务器执行这些查询 -> (如果查询相同,请检查表 - 如果查询不同,请尝试找出差异) @nikistag 尝试了两种方式,没有区别。但是感谢您的提示 您是导入完整数据库还是运行迁移然后填充数据库?您的外键可能有错误,并且作为生产服务器它被隐藏了。 @nikitag 我进行了迁移并稍后填充。所以也许这可能是可能的。我将尝试清除整个数据库,然后重新迁移所有内容。 【参考方案1】:

对于任何有类似问题的人,请检查您的表是使用 InnoDB 引擎而不是 MyISAM 或任何其他引擎创建的。在 laravel 中,您可以在 app/config/database.php 中指定它。只需在 mysql 配置下将引擎参数更改为“InnoDB”而不是 null。

Laravel & InnoDB

这解决了数据库的问题,laravel 端仍然坏了

【讨论】:

以上是关于雄辩的一对多关系在生产服务器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel ajax url 在生产服务器上不起作用

作曲家自动加载在生产服务器上不起作用

雄辩的关系 WHERE 语句不起作用

Laravel 7雄辩的关系不起作用

Laravel 雄辩的关系在我的情况下不起作用[重复]

Laravel 一对多关系不起作用 - 返回递归