$reply->user得到的数据为空:Trying to get property 'name' of non-object 。
1. 运行环境
homestead
1). 当前使用的 Laravel 版本?
Laravel Framework 8.82.0
2). 当前使用的 php/php-fpm 版本?
PHP 版本:PHP 7.4
3). 当前系统
Windows 10
2. 问题描述?
一个用户可以发表多条评论,而一条评论属于一个作者。即:用户和评论是一对多的关系。按照教程在Reply模型中定义了user方法,用于获取发表该评论的用户。但是在_reply_list.blade.php中,使用$reply->user得到的却是一个空集合。
打印$reply的结果如下:

打印$reply->user的结果为null。
打印$reply->user()->get()的结果如下:

3. 您期望得到的结果?

4. 您实际得到的结果?

出错之后检查了几遍,后面都是直接复制教程的代码,可是还是报这个错,不知道问题出在哪?
这时候我才恍然大悟,总共才10个用户啊!!!于是打开了
replies表如图:
所以问题出在数据填充时
关于 LearnKu
今天早上看了文档才发现了问题出在哪里。当我在
tinker中测试的时候,发现有的评论使用$reply->user->name命令时有结果,有的则没有。我就纳闷了,一条评论一定是由一个用户发布的,怎么可能会没有结果呢,于是我就想通过$reply结果中的user_id去找出对应的用户,执行命令后发现确实为空。HeidiSQL查看replies表,发现了user_id的值介于1~100。users表如图:
replies表如图:
所以问题出在数据填充时
为指定字段赋值的地方。但是我打开ReplyFactory.php,发现为user_id的范围没有错啊:但是,不管三七二十一,复制了教程上的代码,再执行了一次
php artisan migrate:refresh --seed。 刷新了一下就不报错了。但为什么一开始为
user_id赋值时会出问题,范围明明是(1,10),怎么变成了(1,100)呢?修复这个bug的历程: 一开始我总以为是模型关联出了问题,就反复纠结为什么没有关联成功。还以为又是某个未知的知识导致的bug,就忽略了用自己已知的知识去逐步排查这个bug。