gpt4 book ai didi

laravel - 如何使用 Laravel eloquent 执行 has many through 语句?

转载 作者:行者123 更新时间:2023-12-04 17:50:06 25 4
gpt4 key购买 nike

假设我有三个表用户、用户组和组。如何通过用户组表获取用户组?

class User extends Eloquent {
protected $table = 'users';
}

class Groups extends Eloquent {
protected $table = 'groups';
}

class Usergroups extends Eloquent {
protected $table = 'users_groups';
}

最佳答案

根据您的要求,我为您的特定用例整理了一个简单的示例:

表格:

Eloquent 建议在这种情况下创建 3 个数据库表:users , groupsgroup_user .

Laravel documentation指出:

The group_user table's name is derived from the aplhabetical order of the related model names.


group_user表应包含列 user_idgroup_id它将包含组和用户条目的主键。 group_user table 是所谓的数据透视表。

这符合 3NF (如果你有兴趣)。

模型:
User模型应包含以下代码:
<?php 

class User extends Eloquent {

//...Other code…

public function groups()
{
return $this->belongsToMany('Group');
}

}
Group模型应包含以下代码:
<?php

class Group extends Eloquent {

//...Other code…

public function users()
{
return $this->belongsToMany('User');
}

//...Other code…

}

你做 不是 需要 UserGroup在您的问题中找到的模型。

用法:

为了检索特定用户所属的所有组,您将执行以下操作:
$user = User::find($user_id);
$user_groups = $user->groups();

同样,为了检索属于特定组的所有用户,您将执行以下操作:
$group = Group::find($group_id);
$group_users = $group->users();

为了将用户添加/删除到组将执行以下操作:
$user = User::find($user_id);
//Add a user
$user->groups()->attach($group_id);
//Detach a user
$user->groups()->detach($group_id);

其他:

您应该在 Laravel 文档中阅读有关数据透视表的更多信息 here以及在迁移中定义外键(用于数据透视表) here .

我希望这有帮助!

关于laravel - 如何使用 Laravel eloquent 执行 has many through 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18422743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com