如何使用laravel eloquent执行一个有很多通过语句?

Ros*_*ano 5 laravel laravel-4

假设我有三个表用户,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';
}
Run Code Online (Sandbox Code Playgroud)

Hug*_*rth 8

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

表格:

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

Laravel 文件指出:

group_user表的名称是从相应的型号名称aplhabetical顺序而获得的.

group_user表应包含列user_id,group_id其中包含组和用户条目的主键.该group_user表就是所谓的数据透视表.

这符合3NF(如果您有兴趣).

型号:

User模型应包含以下代码:

<?php 

class User extends Eloquent {

    //...Other code…

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

} 
Run Code Online (Sandbox Code Playgroud)

Group模型应包含以下代码:

<?php

class Group extends Eloquent {

    //...Other code…

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

    //...Other code…

}
Run Code Online (Sandbox Code Playgroud)

不是需要UserGroup在你的问题中发现的模型.

用法:

要检索特定用户所属的所有组,您将执行以下操作:

$user = User::find($user_id);
$user_groups = $user->groups();
Run Code Online (Sandbox Code Playgroud)

同样,为了检索属于特定组的所有用户,您将执行以下操作:

$group = Group::find($group_id);
$group_users = $group->users();
Run Code Online (Sandbox Code Playgroud)

为了向组添加/删除用户,将执行以下操作:

$user = User::find($user_id);
//Add a user
$user->groups()->attach($group_id);
//Detach a user
$user->groups()->detach($group_id);
Run Code Online (Sandbox Code Playgroud)

其他:

你应该在有关数据透视表的Laravel文档阅读更多这里和关于您的迁移定义外键(数据透视表)这里.

我希望有所帮助!