雄辩的一对多关系在生产服务器上不起作用
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 端仍然坏了
【讨论】:
以上是关于雄辩的一对多关系在生产服务器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章