php - 如何使用 AJAX 保存用户角色?

标签 php jquery mysql ajax laravel

我有 2 个模型,用户、角色和数据透视表。目前在我的 Controller 中,它在复选框中显示了用户拥有的角色,我该怎么做才能将想要的角色存储到数据库中?单击提交(potvrdi)按钮时,如何编写 ajax 将其保存到数据库?您在此处看到的当前 ajax(part) 用于在表中显示数据。这个功能的脚本写在 View 中

Controller

public function action(Request $request)
    {
        if ($request->ajax()) {
            $query = $request->get('query');
            if ($query != '') {
                $data = User::where('surname', 'like', '%'.$query.'%')
                    ->orWhere('name', 'like', '%'.$query.'%')
                    ->orWhere('phone', 'like', '%'.$query.'%')
                    ->orderBy('id')
                    ->get();
            } else {
                $data = User::orderBy('id')
                    ->get();
            }
            return json_encode($this->generateUserTable($data));
        }
    }

    public function generateUserTable($data)
    {
        $total_row = $data->count();
        $output = "";
        if ($total_row > 0) {
            foreach ($data as $row) {
                $roleNames = '';
                $userRoles = $row->roles()->pluck('id')->toArray();
                // var_dump($userRoles);
                $checked = '';
                foreach (Role::all() as $roles1) {
                    if (in_array($roles1->id, $userRoles)) {
                        $checked = 'checked="checked"';
                    }
                    $roleNames .= $roles1->role != null ? $roles1->role.' '.'<input type="checkbox" '.$checked.' name="role" value="'.$roles1->id.'" class="checkbox" id="checkboxId">'.' ' : '';
                }
                $output .= '
                    <tr>
                        <td>'.$row->surname.'</td>
                        <td>'.$row->name.'</td>
                        <td>'.$row->phone.'</td>
                        <td>'.$roleNames.'</td>
                        <td><button type="button" id="potvrdi" class="potvrdi-button btn btn-primary" data-id="'.$row->id.'">
                        <div class="potvrdi">Potvrdi</div>
                        </button></td>
                        <td><button type="button" id="rowId" class="remove-button btn btn-danger" data-id="'.$row->id.'">
                        <div class="close">&#120;</div>
                        </button></td>
                    </tr>
                ';
            }
        } else {
            $output = '
                <tr>
                    <td align="center" colspan="5">Nema podataka</td>
                </tr>
            ';
        }
        return array(
            'table_data'  => $output,
            'total_data'  => $total_row,
        );
    }

用户

protected $fillable = [
        'name', 'surname', 'email', 'phone', 'password',
    ];

    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = bcrypt($value);
    }

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
    public function IsAdmin()
    {
        $IsAdmin = false;
        $IsAdmin = !$this->roles->filter(function ($item) {
            return $item->role == 'Admin';
        })->isEmpty();
        return $IsAdmin;
    }

作用

protected $fillable = [
        'role',
    ];

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

路线

Route::group(['middleware' => ['web', 'auth']], function () {
    Route::get('/admin', 'PagesController@admin');
    Route::post('/adminForma', 'PagesController@adminForma')->name('adminForma');
    Route::get('/users', 'PagesController@users');
    Route::get('/settings', 'PagesController@settings');
    Route::post('/settings', 'PagesController@settings');
    Route::get('/generateUserTable', 'PagesController@generateUserTable');
    Route::post('/generateUserTable', 'PagesController@generateUserTable');
    Route::get('/live_search/action', 'PagesController@action')->name('live_search.action');
    Route::post('/live_search/action', 'PagesController@action');
    Route::get('/live_search/destroy', 'PagesController@destroy')->name('live_search.destroy');
    Route::post('/live_search/generateUserTable', 'PagesController@generateUserTable');
    Route::get('/live_search/generateUserTable', 'PagesController@generateUserTable')->name('live_search.generateUserTable');
});

最佳答案

在您的 JavaScript 代码中,当用户单击提交按钮时,获取所有选中的角色并将其 ID 存储在一个数组中。然后发布数据:

data = {
  id: user_id,
  roles_ids: roles_ids_array
}

在您的 Controller 方法中,获取用户并将关系与 ID 同步。

$user = User::find($request->get('user_id'));
$roles_ids= $request->get('roles_ids');
$user->sync($roles_ids);

您的问题与此类似:Laravel attach pivot to table with multiple values

关于php - 如何使用 AJAX 保存用户角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53319796/

相关文章:

javascript - 我如何使用 PHP 读取/解析 javascript 的对象列表?

mysql - 在 Ruby on Rails 中在运行时构建表

mysql - 如何检索没有评论?

php - 插入 ORM 自引用外键

jquery - 仅对特定的 div 使用缩放

php - 如何在 SQL 中显示表的名称

php - 命令在 php 中恢复 mysql 数据库备份

处理 block 时的 PHP foreach

javascript - 为什么 .join() 不能使用函数参数?

javascript - 为什么 jQuery cookie 插件不将浮点变量保存为值?