Laravel 5.6 模型关联 user 表后查询 user 表数据只能获取第一条数据,不知道怎么获取第二条

按照开发手册的说法,肯定是指令不够全,附代码图file,求老手指导一下

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
lmaster
最佳答案

不太明白你说的是什么。
如果, tests 是文章表, users 是用户表 test.com/tests/1 是 id 为 1 的文章地址( get 访问)
假如 TestsController 是控制器 show 是文章详情

publish function show(Test $test,Request $requset){
   $mode=$test::find($requset->id);// 获取 id 为 1 的文章模型
   $name=$mode->user->name;// 使用动态属性获得 User 模型,在取到 name 属性
   var_dump($mode->user()->get()->toArray());// 可以看看都是什么
}

会生成相关 sql

# 获取文章模型
select * from tests where id=1 limit 1
# 使用文章模型的 user 放法,?是上面查到的 user_id
select * from users where id=? limit 1

所以这个有一个 N+1 的问题,就是当你的文章模型有 N 的时候,你要得到每一个文章作者的名字,就会产生 1 个文章查询和 N 个 用户查询,所以有一个 with 方法可以避免,这个你可以自行研究下

5年前 评论
讨论数量: 7
__yu

belongsTo 是反向一对多,你这么写 就是对应一个 user
模型关联《Laravel 5.6 中文文档》

5年前 评论

@__yu 这个我知道他是一对多,但是问题是我只能取到users表中id=1的数据,不是说我不能取好多条,而是我取不到id=2的数据

5年前 评论
yema

贴下2个表结构。看是不是你主键外键关联不对

5年前 评论

@yema

file

file
外键没启用,不过我在nav中建立了外键

5年前 评论

@yema 最尴尬的就是我查询id=1的可以成功取出,查询id=2的就为空,tests存放的是文章,从评论表里获取到对应文章id的评论然后输出,但是我评论表里存储的user_id是int类型的,所以取出来后需要查询该id对应的user信息。现在就是有user的id,但是只能取users表中id=1的数据。

5年前 评论
yema

来晚了。手册中belongsTo是有3个参数,可以指定外键的名称,如果不指定默认使用id当作键。

return $this->belongsTo('App\User', 'foreign_key', 'other_key');

按照代码上说的应该是一个test对应一个User 既然是反向关联,你test表中存在的外键是user_id,你尝试使用

return $this->belongsTo('App\User', 'user_id');

5年前 评论
lmaster

不太明白你说的是什么。
如果, tests 是文章表, users 是用户表 test.com/tests/1 是 id 为 1 的文章地址( get 访问)
假如 TestsController 是控制器 show 是文章详情

publish function show(Test $test,Request $requset){
   $mode=$test::find($requset->id);// 获取 id 为 1 的文章模型
   $name=$mode->user->name;// 使用动态属性获得 User 模型,在取到 name 属性
   var_dump($mode->user()->get()->toArray());// 可以看看都是什么
}

会生成相关 sql

# 获取文章模型
select * from tests where id=1 limit 1
# 使用文章模型的 user 放法,?是上面查到的 user_id
select * from users where id=? limit 1

所以这个有一个 N+1 的问题,就是当你的文章模型有 N 的时候,你要得到每一个文章作者的名字,就会产生 1 个文章查询和 N 个 用户查询,所以有一个 with 方法可以避免,这个你可以自行研究下

5年前 评论

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