Laravel 使用选择框附加角色

Posted

技术标签:

【中文标题】Laravel 使用选择框附加角色【英文标题】:Laravel Attach Role using Select Box 【发布时间】:2020-06-19 23:26:50 【问题描述】:

我正在尝试使用选择框为用户附加角色,但它不起作用

我有 Roles 表和 Roles 和 Users 表之间的桥接表

我知道这是多对多的关系,我应该使用复选框而不是选择框

但当时出于某种原因,我只需要为用户分配 1 个角色

所以,我必须使用选择框

有什么想法吗?

控制器

public function store(Request $request)

    $this->validate($request, array(
        'name'         => 'required|string|max:255',
        'email'          => 'required|string|email|max:255|unique:users',
        'password'          => 'required|string|min:8',
    ));
    $password = Hash::make($request->password);
    $user = new User;
    $user->name = $request->input('name');
    $user->email = $request->input('email');
    $user->password = $password;
    $user->save();

    if ($request['user']) 
        $user->roles()->attach(Role::where('name','user')->first());
    
    if ($request['editor']) 
        $user->roles()->attach(Role::where('name','editor')->first());
    
    if ($request['admin']) 
        $user->roles()->attach(Role::where('name','admin')->first());
    

    return redirect('users')->with('success', 'user is successfully saved');

查看

                        <div class="form-group">
                            <label class="col-12">Roles</label>
                            <div class="col-12">
                                <div class="custom-control custom-radio mb-5">
                                    <input class="custom-control-input" type="radio" name=admin" id="example-radio1" value="admin">
                                    <label class="custom-control-label" for="example-radio1">Admin</label>
                                </div>
                                <div class="custom-control custom-radio mb-5">
                                    <input class="custom-control-input" type="radio" name=pharmacy" id="example-radio2" value="editor">
                                    <label class="custom-control-label" for="example-radio2">Editor</label>
                                </div>
                                <div class="custom-control custom-radio mb-5">
                                    <input class="custom-control-input" type="radio" name=company" id="example-radio3" value="user">
                                    <label class="custom-control-label" for="example-radio3">User</label>
                                </div>
                            </div>
                        </div>

【问题讨论】:

【参考方案1】:

我认为这里的复选框可能比单独的无线电输入更好。

<input type="checkbox" name="roles[]" value="admin"><label>Admin</label>
<input type="checkbox" name="roles[]" value="editor"><label>Editor</label>
<input type="checkbox" name="roles[]" value="user"><label>User</label>

在 Laravel 方面:

// find the ids of the roles submitted by name
$role_ids = Role::whereIn('name', $request->input('roles', []))->pluck('id');
// attach any ids needed
$user->roles()->attach($role_ids);

【讨论】:

以上是关于Laravel 使用选择框附加角色的主要内容,如果未能解决你的问题,请参考以下文章

如何填充输入选择框Laravel vue js

如何从 API 调用附加到 WordPress 定制器中的选择框?

Laravel-5 如何使用 id 值和名称值从数据库中填充选择框

选择框 laravel 未定义的变量

使用产品插件选择框显示产品价格 WooCommerce

输入字段自动完成搜索选择名称并将id存储在输入框laravel