Laravel的数据透视表+一般数据透视表

2022-08-30 16:59:53

什么是一般情况下的 laravel 数据透视表和数据透视表?这到底是怎么回事?

最近我对数据透视表进行了研究。我以为我了解他们,他们是什么,但后来我可能错了。

我一直认为数据透视表只是两个表之间的表(关系多对多)

但后来我开始了这个研究,碰巧不是那样的,而是像普通表的不同架构,其中行是列。它改变了。

但后来Laravel也有数据透视表。开始阅读文档并进行研究。也许我读错了,但它看起来只是拉拉维尔的转轴表 - 桌子在两张桌子之间,多对多。

在其他地方搜索,但找不到有关它的正确信息。

好吧,就这样吧。Laravel的支点只是多对多!

然后我开始了项目,今天我到了这样的地步,即将这个中间表作为枢轴驱使我进入一个问题,我对此有问题......分钟和小时...无法解决这个问题。

模型是class Room_Student extends Pivot

修复方法是什么?只需将其更改为 .class Room_Student extends Model

我认为我不再了解数据透视表,它们是不同类型的数据透视表吗?拉拉维尔的支点不同吗?

所以我的问题是,数据透视表到底是什么?+拉拉维尔的数据透视表。它们不同吗?这是关于什么的?

请帮助我理解这一点。


答案 1

学习时,只关注Laravel(或雄辩)中的数据透视表概念。当我学习时,我并不关心数据透视表的一般含义。我只关注文档中的事实(https://laravel.com/docs/5.5/eloquent-relationships#many-to-many)

多对多关系需要一个额外的表。我们还可以在此表中插入其他有用的数据。并且可以用作系统中的模型。

示例:用户和角色的多对多关系 = User_roles

enter image description here

由于数据透视表,您可以将中间表数据作为模型进行检索(与系统中的其他模型一样)。

例:

//get user by id
$user = App\User::find(1);

//get roles of this user
foreach ($user->roles as $role) {

  //pivot attribute returns a model which represent user_role table
  echo $role->pivot->created_at;

}

注意:您可以通过扩展透视来创建类。但是你必须实现正确的关系才能使它工作。您的代码看起来应该与下面的代码有些相似。

class Student extends Model
{
    /**
     * The users that belong to the role.
     */
    public function Rooms()
    {
        return $this->belongsToMany('App\Room')->using('App\Room_Student');
    }
}

class Room extends Model
{
    /**
     * The users that belong to the role.
     */
    public function Students()
    {
        return $this->belongsToMany('App\Student')->using('App\Room_Student');
    }
}

class Room_Student extends Pivot
{
    //
}

我希望这有帮助。


答案 2

简单地说是一个数据透视表,一个将两个表连接在一起的表

假设您有一个表用户

USERS:
user_id, user_name

说你有一个桌面游戏

GAMES
game_id, game_name

用户可以玩许多游戏。游戏有很多用户在玩它们。

要链接它们,您需要制作第三个表

GAMES_TO_USERS
game_id, user_id

使用此表,您可以请求用户玩哪些游戏,以及哪些用户玩哪个游戏。

在本例中,此表是数据透视表。GAMES_TO_USERS


推荐