【问题标题】:How to perform a has many through statement using laravel eloquent?如何使用 laravel eloquent 执行 has many through 语句?
【发布时间】:2013-08-24 20:17:28
【问题描述】:

假设我有三个表users,users_groups 和groups。如何通过users_groups 表获取用户的组?

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

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

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

【问题讨论】:

  • 您正在寻找的是多对多关系。您可以查看文档 here 。我希望这会有所帮助!
  • 你能为我的场景提供一个例子吗

标签: laravel laravel-4


【解决方案1】:

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

表格:

Eloquent 建议在这种情况下创建 3 个数据库表:usersgroupsgroup_user

Laravel documentation 声明:

group_user 表的名称源自相关模型名称的 aplhabetical 顺序。

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

这符合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

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2011-02-08
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多