Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

tinkerbell's avatar

Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given, called in C:\xampp\laravel\posinvoice\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php on line 886

I want to seed my table using this seeder but it gives the above error

it's working when I am using the comment codes and only seeding name but after added the display_name and description it gives error.


<?php
  
namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
  
class PermissionTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // $permissions = [
        //    'user-list',
        //    'user-create',
        //    'user-edit',
        //    'user-delete',

        //    'role-list',
        //    'role-create',
        //    'role-edit',
        //    'role-delete',
    // ];      ///working for the commented code 




    $permissions=array(
       'name' => [ 
           'user-list',
           'user-create',
           'user-edit',
           'user-delete',

           'role-list',
           'role-create',
           'role-edit',
           'role-delete',
           ],

        'display_name' =>  [
           'Users List',
           'Create User',
           'Edit User',
           'Delete User',

           'Roles List',
           'Create User',
           'Edit User',
           'Delete User', 
] ,
'description' =>  [
           'Can see Users list and search for specific users',
           'Can create users',
           'Can edit users',
           'Can delete users',

           'Can see Roles list and search for specific users',
           'Can create Roles',
           'Can edit Roles',
           'Can delete Roles',
           ]);

     
        foreach ($permissions as $permission) {
            Permission::create(['name' => $permission , 'display_name' => $permission , 'description' => $permission]);
        }
    }
}

0 likes
1 reply
CorvS's avatar
CorvS
Best Answer
Level 27

You changed your permissions array to a nested array, so your foreach is incorrect.

Maybe you should map your permissions differently:

$permissions = [
    'user-list' => [
        'display_name' => 'Users List',
        'description' => 'Can see Users list and search for specific users',
    ],
    'user-create' => [
        'display_name' => 'Create User',
        'description' => 'Can create users',
    ],
    ...
];

Then you could do it like this:

foreach ($permissions as $name => $permission) {
    Permission::create([
        'name' => $name,
        'display_name' => $permission['display_name'],
        'description' => $permission['description'],
    ]);
}
1 like

Please or to participate in this conversation.