多对多关系不应该三个表吗,怎么就一个 users 表和一个中间表 followers,粉丝表 follower 怎么没有,如果没有怎么进行连接呢?

<?php

namespace App\Models;
.
.
.
class User extends Authenticatable
{
.
.
.
public function followers()
{
return $this->belongsToMany(User::Class, 'followers', 'user_id', 'follower_id');
}

public function followings()
{
    return $this->belongsToMany(User::Class, 'followers', 'follower_id', 'user_id');
}

}

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

@吃瓜群众 user_idfollower_id 都是 user 的主键 ID,只是在逻辑上,user_id 表示被关注人,follower_id 表示被关注人的粉丝,followers 表作为中间表存储了这个关系,它的两个关联表恰好是同一个表,即 user 表。

6年前 评论
讨论数量: 9

@吃瓜群众 user_idfollower_id 都是 user 的主键 ID,只是在逻辑上,user_id 表示被关注人,follower_id 表示被关注人的粉丝,followers 表作为中间表存储了这个关系,它的两个关联表恰好是同一个表,即 user 表。

6年前 评论

这里有一点是值得注意的:

在这本书的后面会有介绍:
Auth::user()->followings 的用法。我们在 User模型里定义了关联方法 followings(),关联关系定义好后,我们就可以通过访问 followings 属性直接获取到关注用户的 集合。这是 Laravel Eloquent 提供的「动态属性」属性功能,我们可以像在访问模型中定义的属性一样,来访问所有的关联方法。

这里需要区别的是

$user->followings
$user->followings()

两者调用时返回的数据是不一样的。

$user->followings 返回的是 Eloquent 集合

$user->followings() 返回的是 数据库请求构建器

followings()的情况下,你需要使用:

$user->followings()->get()

或者 :

$user->followings()->paginate()

这样才能获取到最终数据。

可以简单理解为 followings 返回的是数据集合,而 followings() 返回的是数据库查询器,相关的查询条件已经写好勒,只需要执行这个查询器的查询方法,获得该次查询的结果。
也就是在最后使用 get() 方法的话:

$user->followings == $user->followings()->get() // 等于 true
5年前 评论

第三张表就是users,粉丝也是User

6年前 评论

多谢您的解答,谢谢

还是有个疑问,外键user_id 对应的应该是users, 请问外键 follower_id 对应的是哪个表呢

6年前 评论

follower_id也是followers表的外键,和users表的id关联。

6年前 评论

谢谢,想了想还是想通了,users 即使粉丝表又是关注表,用外键user_id和follow_id区别这两个表,多谢解答,非常感谢

6年前 评论

@吃瓜群众 感觉你这个理解是不对的

6年前 评论

@吃瓜群众 user_idfollower_id 都是 user 的主键 ID,只是在逻辑上,user_id 表示被关注人,follower_id 表示被关注人的粉丝,followers 表作为中间表存储了这个关系,它的两个关联表恰好是同一个表,即 user 表。

6年前 评论

这里有一点是值得注意的:

在这本书的后面会有介绍:
Auth::user()->followings 的用法。我们在 User模型里定义了关联方法 followings(),关联关系定义好后,我们就可以通过访问 followings 属性直接获取到关注用户的 集合。这是 Laravel Eloquent 提供的「动态属性」属性功能,我们可以像在访问模型中定义的属性一样,来访问所有的关联方法。

这里需要区别的是

$user->followings
$user->followings()

两者调用时返回的数据是不一样的。

$user->followings 返回的是 Eloquent 集合

$user->followings() 返回的是 数据库请求构建器

followings()的情况下,你需要使用:

$user->followings()->get()

或者 :

$user->followings()->paginate()

这样才能获取到最终数据。

可以简单理解为 followings 返回的是数据集合,而 followings() 返回的是数据库查询器,相关的查询条件已经写好勒,只需要执行这个查询器的查询方法,获得该次查询的结果。
也就是在最后使用 get() 方法的话:

$user->followings == $user->followings()->get() // 等于 true
5年前 评论

@KKKKUNG 点通了,谢谢,但是不知道他的底层是怎么定义的,关于 followings和followings(),followings() 应该是一个query对象,这样解释会不会更好点 :+1:

5年前 评论

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