Laravel - How To Get Rows Of Permissions From Another Table Set In Roles Table

- 1 answer

I am very new to laravel and trying to get the all permission rows from the permissions table that set into the roles - permission field as a json

Obviously, this is not working as aspected. It returns an array of collections. However, I want each permission rows that associate with the roles results in itself.

public function index()
    $roles = Role::all();

    foreach ($roles as $role) {
        $permissions[] = Permission::whereIn('id', json_decode($role->permission))->get();



Permissions table

enter image description here

Roles table

enter image description here



It is recommended to extract the permission field to a separate table. This would make it possible to implement constraints to ensure the referenced permission id and role id do actually exists. A possible table name would be: permission_role with the following columns: permission_id and role_id.

The migration could be setup like this:

Schema::create('permission_role', function (Blueprint $table) {