【问题标题】:Laravel (Eloquent)Laravel(雄辩)
【发布时间】:2018-02-19 03:03:38
【问题描述】:

我想知道如何使用 laravel Model & Eloquent 建立关系。

我有类似这样的数据结构

用户表

username
groups
id

组表

id
name
remark

我的问题是如何显示用户组(用户可以分配到多个组) 以及如何计算分配给每个组的用户数。

谢谢。

更新

public function store(Request $request){
    $member = new Member();
    $member->username = $request->input('name');
    $member->gender = $request->input('gender');
    $member->joindate = $request->input('joindate');
    $member->remarks = $request->input('remarks');
    if ($request->hasFile('photo')) {
        if ($request->file('photo')->isValid()) {
            $path = $this->upload($request);
        }
    }
    $member->save();

    foreach ($request->only('groups[]') as $key => $group){
        $pivot = new pivot();
        $pivot->user_id = ????? //how to get user id?
    }
}

public function upload(Request $request)
{
    $path = $request->file('photo')->store('profile');
    return $path;
}

对吗? 以及如何获取当前保存的 user_id(它有自动增量列)。

【问题讨论】:

    标签: php database laravel


    【解决方案1】:

    您需要创建一个数据透视表,将每个用户分配到各自的组。

    所以基本上你的表格会是这样的:

    用户表

    id
    username
    

    组表

    id
    name
    remark
    

    用户 -> 组数据透视表

    user_id
    group_id
    

    然后您可以在您的用户模型上使用 Eloquent 关系来定义您的关系方法,如下所示:

    class User extends Model {
    
        public function groups() {
    
            return $this->belongsToMany(Group::class, 'user_group_pivot_table_name', 'user_id', 'group_id');
    
        }
    
    }
    

    最后,您可以通过执行以下操作返回所有用户组的集合:

    $user->groups();
    

    Eloquent ORM 上的Laravel documentation 也非常出色。狩猎愉快。

    【讨论】:

    • 公共函数存储(请求 $request){ $member = new Member(); $member->username = $request->input('name'); $member->gender = $request->input('gender'); $member->joindate = $request->input('joindate'); $member->remarks = $request->input('remarks'); if ($request->hasFile('photo')) { if ($request->file('photo')->isValid()) { $path = $this->upload($request); } } $member->save(); foreach ($request->only('groups[]') as $key => $group){ $pivot = new pivot(); $pivot->user_id = ????? } } 那正确吗?以及如何获取 user_id (auto inc)?
    • 查看更新的答案!然后,您可以使用 foreach 循环遍历集合。
    • 至于您的评论,我假设您正在尝试存储头像?如果是这种情况,请确保在您上传文件后还分配给用户,以便您知道要在他们的个人资料中显示哪个图像。 Laravel 数据透视表的美妙之处在于它们的使用是透明的。看起来好像 User 模型正在与 Group 模型进行通信,当然我们知道情况并非如此。您只需确保当用户“加入”一个新组时,您在显示此内容的数据透视表中创建一个新条目。
    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2022-07-25
    • 2016-09-28
    • 2016-05-08
    • 2021-07-03
    • 2021-08-11
    相关资源
    最近更新 更多