db->tableExists('nav_items') || ! $this->db->tableExists('role_nav_items')) { return; } $nav = $this->db->table('nav_items') ->select('id') ->where('url', 'administrator/enrollment-admin') ->limit(1) ->get() ->getRowArray(); if ($nav === null) { return; } $this->grantRoles((int) $nav['id'], [ 'administrator', 'principal', 'vice_principal', 'head of department (education)', ]); cache()->clean(); } public function down(): void { } private function grantRoles(int $navItemId, array $roleNames): void { if (! $this->db->fieldExists('role_id', 'role_nav_items') || ! $this->db->tableExists('roles')) { return; } foreach ($roleNames as $roleName) { $roleBuilder = $this->db->table('roles')->select('id'); $roleBuilder->groupStart() ->where('LOWER(name)', strtolower($roleName)); if ($this->db->fieldExists('slug', 'roles')) { $roleBuilder->orWhere('LOWER(slug)', strtolower($roleName)); } $role = $roleBuilder->groupEnd() ->limit(1) ->get() ->getRowArray(); if ($role === null) { continue; } $exists = $this->db->table('role_nav_items') ->where('role_id', (int) $role['id']) ->where('nav_item_id', $navItemId) ->countAllResults() > 0; if (! $exists) { $this->db->table('role_nav_items')->insert([ 'role_id' => (int) $role['id'], 'nav_item_id' => $navItemId, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); } } } }