Как вставить несколько ролей в таблицу сотрудников с помощью laravel - PullRequest
0 голосов
/ 08 июня 2018

Я создаю API, и я борюсь с хранилищем данных для нескольких ролей сотрудников, как хранить, не могли бы вы привести пример, извините за использование иностранного языка.Karyawan = сотрудник, Jabatan = роль

Karyawan.php

public function jabatan() {
    return $this->hasMany('\App\Jabatan','id_jabatan');
}

Jabatan.php

public function karyawan(){
        return $this->belongsTo('\App\Karyawan','id_jabatan');
}

как KaryawanController в функции магазина должен быть ...

this is how its look like in front end

это моя модель и контроллер

я создал сводную таблицу и получил эту ошибку

SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец '0' в 'списке полей' (SQL: вставить в tb_jabatan_karyawan (id_jabatan, id_karyawan, 0, 1) значения (0, 57, 1, 2)) Ини контроллер сама модельня ..

1 Ответ

0 голосов
/ 11 июня 2018

Я использую User и Role вместо Karyawan и Jabatan соответственно (извините за это).User и Role имеет отношение Many-to-Many, поскольку один User может иметь несколько Roles и наоборот.

роли Таблица

+----+------+-----------+
| id | role | timeStamps|
+----+------+-----------+

role_user Сводная таблица

+----+---------+---------+
| id | user_id | role_id |
+----+---------+---------+

Ролевая модель

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

Модель пользователя

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

RoleUser Pivot

namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;

class RoleUser extends Pivot
{
    protected $table='role_user';
    protected $fillable = [
        'user_id','role_id'
    ];

    public static $role_attach_rules = [
        'roles' => 'required|array|min:1|exists:roles,id'
    ];

    public function user(){
        return $this->hasOne('App\User', 'id', 'user_id');
    }

    public function role(){
        return $this->hasOne('App\Role', 'id', 'user_id');
    }
}

Код контроллера для назначения ролей пользователю

Здесь вы поймете методы по их именам.

public function getAssignRole(){
    $users = User::all();
    $roles=Role::all();
    return View::make('assignrole', compact('users', 'roles'));
}

public function postAssignRole(Request $request){
    $attachvalidator = Validator::make($request->all(),RoleUser::$role_attach_rules);
    if ($attachvalidator->fails()){
        return Redirect::back()->withErrors($attachvalidator)->withInput();
    }
    $user=$request->get('user');
    $role=$request->get('roles');
    $attach = User::find($user)->roles()->attach($role);
    return 'Success';
}

public function detachRole(Request $request){
    $user=$request->get('user_update');
    $role=$request->get('roles_update');
    $attach = User::find($user)->roles()->detach($role);
    return 'detach Success';    
}

Просмотреть файл (assignrole.blade.php) для назначения ролей

//This form is for assigning roles
<form method="post" action="{{route('role.assignrole.post')}}">
{{csrf_field()}}
    <select id="user" name="user" class="select_with_style" required>
        @foreach($users as $user)
        <option value="{{$user['id']}}">{{$user['name']}}</option>
        @endforeach
    </select>
    <select id="roles" name="roles[]" class="select_with_style" multiple="" required>
        @foreach($roles as $role)
        <option value="{{$role['id']}}">{{$role['role']}}</option>
        @endforeach
    </select>
    <br>
    <input type="submit" name="submit" class="submit action-button" value="Submit"/>
</form>

//This is for detaching roles from user
<form method="post" action="{{route('role.detach')}}">
{{csrf_field()}}
    <select id="user_update" name="user_update" class="select_with_style"  required>
        @foreach($users as $user)
        <option value="{{$user['id']}}">{{$user['name']}}</option>
        @endforeach
    </select>
    <select id="roles_update" name="roles_update[]" class="select_with_style" multiple="" required>
        @foreach($roles as $role)
        <option value="{{$role['id']}}">{{$role['role']}}</option>
        @endforeach
     </select>
     <br>
     <input type="submit" name="submit" class="submit action-button" value="Update"/>
</form>

Маршруты

Route::get('role/assignrole', array('as' => 'role.assignrole', 'uses' => 'YourController@getAssignRole'));
Route::post('role/assignrole', array('as' => 'role.assignrole.post', 'uses' => 'YourController@postAssignrole'));
Route::post('role/detach', array('as' => 'role.detach', 'uses' => 'YourController@detachRole'));

Надеюсь, это поможет.

Редактировать

Вы можете использовать Voyager вместо выполнения этой большой работы.Это очень легко понять и хорошо структурировать, и я думаю, вам понравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...