zaster
zaster

Reputation: 421

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pk5.roles' doesn't exist

I am able to insert records to employee_roles through tinker but unable to insert them through code

Role.php

<?php

namespace App\Models\Admin\Employee;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{

    protected $table = 'employee_roles';

    public function permissions()
    {
        return $this->belongsToMany('App\Models\Admin\Employee\Permission', 'employee_permission_role', 'role_id', 'permission_id');
    }
}

RoleController.php

<?php

namespace App\Http\Controllers\Admin\Employee;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Employee\Employee;
use App\Models\Admin\Employee\Role;
use App\Models\Admin\Employee\Permission;

class RoleController extends Controller
{

    public function __construct()
    {
        $this->middleware('auth:admin');
    }

    public function index()
    {
        $roles = Role::all();
        return view('admins.employees.roles.role', compact('roles'));
    }

    public function create()
    {
      $permissions = Permission::all();
      return view('admins.employees.roles.create',compact('permissions'));
    }

    public function store(Request $request)
    {

      //dd($request);
        $this->validate($request, [
          'name' => 'required|unique:roles'
        ]);

        $role = new Role();
        $role->name = $request['name'];
        $role->save();
        $role->permissions()->sync($request->permission);

        return redirect(route('admin.employee.role.index'));
    }

admins.employees.roles.create.blade.php

@extends('layouts.admin')

@section('title', 'Role - Create')

@section('left-menu')

@endsection

@section('right-menu')

@endsection

@section('content')
  <h1>Add an Employee Role</h1>
  <br><br>
  @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
  @endif
  <form action="{{ route('admin.employee.role.store') }}" method="post">
        @csrf

      <div class="form-group">
        <label for="name">Role Name</label>
        <input type="text" class="form-control" id="name" name="name" placeholder="Role Name" value="{{ old('name') }}">
      </div>

      <div class="form-row">
        <div class="col-md-4">
          <label for="name"><b>Customer Permissions</b></label>
            @foreach ($permissions as $permission)
              @if ($permission->for == 'Customer')
                <div class="checkbox">
                  <label><input type="checkbox" name="permission[]" value="{{ $permission->id }}">{{ $permission->name }}</label>
                </div>
              @endif
            @endforeach
        </div>

        <div class="col-md-4">
          <label for="name"><b>Despatch Permissions</b></label>
            @foreach ($permissions as $permission)
              @if ($permission->for == 'Despatch')
                <div class="checkbox">
                  <label><input type="checkbox" name="permission[]" value="{{ $permission->id }}">{{ $permission->name }}</label>
                </div>
              @endif
            @endforeach
        </div>
      </div>

    <div class="form-group">
      <button type="submit" class="btn btn-primary">Submit</button>
      <a href='{{ route('admin.employee.role.index') }}' class="btn btn-warning">Back</a>
    </div>

  </form>
@endsection

@section('pagescript')

@stop

Upvotes: 1

Views: 1056

Answers (1)

Teoman Tıngır
Teoman Tıngır

Reputation: 2866

$this->validate($request, [
       'name' => 'required|unique:roles'
]);

You should fix table name as employee_roles

Because you don't have table as roles you said that in your Role model you're using employee_roles table ( protected $table = 'employee_roles';)

Upvotes: 2

Related Questions