$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得到的数据为空:Trying to get property 'name' of non-object 。
打印$reply->user的结果为null。
打印$reply->user()->get()的结果如下:

$reply->user得到的数据为空:Trying to get property 'name' of non-object 。

3. 您期望得到的结果?

$reply->user得到的数据为空:Trying to get property 'name' of non-object 。

4. 您实际得到的结果?

$reply->user得到的数据为空:Trying to get property 'name' of non-object 。
出错之后检查了几遍,后面都是直接复制教程的代码,可是还是报这个错,不知道问题出在哪?

L02
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

今天早上看了文档才发现了问题出在哪里。当我在tinker中测试的时候,发现有的评论使用$reply->user->name命令时有结果,有的则没有。我就纳闷了,一条评论一定是由一个用户发布的,怎么可能会没有结果呢,于是我就想通过$reply结果中的user_id去找出对应的用户,执行命令后发现确实为空。

file 这时候我才恍然大悟,总共才10个用户啊!!!于是打开了HeidiSQL查看replies表,发现了user_id的值介于1~100

users表如图: file replies表如图: file 所以问题出在数据填充时为指定字段赋值的地方。但是我打开ReplyFactory.php,发现为user_id的范围没有错啊:

return [
            'content' => $this->faker->sentence(),
            'topic_id' => rand(1, 100),
            'user_id' => rand(1, 10),
        ];

但是,不管三七二十一,复制了教程上的代码,再执行了一次php artisan migrate:refresh --seed。 刷新了一下就不报错了。

但为什么一开始为user_id赋值时会出问题,范围明明是(1,10),怎么变成了(1,100)呢?

修复这个bug的历程: 一开始我总以为是模型关联出了问题,就反复纠结为什么没有关联成功。还以为又是某个未知的知识导致的bug,就忽略了用自己已知的知识去逐步排查这个bug。

2年前 评论
讨论数量: 1

今天早上看了文档才发现了问题出在哪里。当我在tinker中测试的时候,发现有的评论使用$reply->user->name命令时有结果,有的则没有。我就纳闷了,一条评论一定是由一个用户发布的,怎么可能会没有结果呢,于是我就想通过$reply结果中的user_id去找出对应的用户,执行命令后发现确实为空。

file 这时候我才恍然大悟,总共才10个用户啊!!!于是打开了HeidiSQL查看replies表,发现了user_id的值介于1~100

users表如图: file replies表如图: file 所以问题出在数据填充时为指定字段赋值的地方。但是我打开ReplyFactory.php,发现为user_id的范围没有错啊:

return [
            'content' => $this->faker->sentence(),
            'topic_id' => rand(1, 100),
            'user_id' => rand(1, 10),
        ];

但是,不管三七二十一,复制了教程上的代码,再执行了一次php artisan migrate:refresh --seed。 刷新了一下就不报错了。

但为什么一开始为user_id赋值时会出问题,范围明明是(1,10),怎么变成了(1,100)呢?

修复这个bug的历程: 一开始我总以为是模型关联出了问题,就反复纠结为什么没有关联成功。还以为又是某个未知的知识导致的bug,就忽略了用自己已知的知识去逐步排查这个bug。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!