AgentStack
SKILL verified MIT Self-run

Create Grid Query Builder

skill-jeffsenso-prestashop-skills-create-grid-query-builder · by jeffsenso

>

No reviews yet
0 installs
8 views
0.0% view→install

Install

$ agentstack add skill-jeffsenso-prestashop-skills-create-grid-query-builder

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Create Grid Query Builder? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

create-grid-query-builder

Read @.ai/Component/Grid/CONTEXT.md for the factory trilogy and GridDataFactory decoration pattern.

1. Query Builder

Create src/Adapter/{Domain}/Grid/Query/{Domain}QueryBuilder.php implementing DoctrineQueryBuilderInterface or extending AbstractDoctrineQueryBuilder:

Two required methods:

  • getSearchQueryBuilder(SearchCriteriaInterface $searchCriteria): QueryBuilder — returns rows for the current page
  • getCountQueryBuilder(SearchCriteriaInterface $searchCriteria): QueryBuilder — returns total count (no LIMIT/OFFSET)

Building the query

  1. Base query: SELECT c.id_{domain}, c.name, c.active FROM ps_{domain} c
  2. For each filter in $searchCriteria->getFilters(), add a WHERE clause with parameterized values
  3. Apply sorting: map $searchCriteria->getOrderBy() to actual column expressions
  4. Apply pagination: ->setFirstResult($offset)->setMaxResults($limit) (search query only, not count)
  5. For multilingual columns: LEFT JOIN the _lang table with the current language ID

Reference: src/Core/Grid/Query/LanguageQueryBuilder.php (simple), src/Adapter/Manufacturer/QueryBuilder/ManufacturerQueryBuilder.php (with joins)

2. GridDataFactory (standard)

For most grids, the standard DoctrineGridDataFactory is sufficient — it calls the query builder automatically. Just wire it in DI:

prestashop.core.grid.data.factory.{domain}:
    class: 'PrestaShop\PrestaShop\Core\Grid\Data\Factory\DoctrineGridDataFactory'
    arguments:
        - '@prestashop.core.admin.{domain}.query_builder'
        # ... hook dispatcher, query parser, etc.

3. GridDataFactory decorator (if post-processing needed)

When grid data needs transformation after query execution (e.g. resolving image URLs from IDs, formatting computed columns), create a decorator:

  • Create a class implementing GridDataFactoryInterface
  • Inject the original GridDataFactory
  • In getData(SearchCriteriaInterface $searchCriteria): call the wrapped factory, then modify the RecordCollection
  • Register with decorates: in DI YAML
class {Domain}GridDataFactory implements GridDataFactoryInterface
{
    public function __construct(
        private readonly GridDataFactoryInterface $dataFactory,
    ) {}

    public function getData(SearchCriteriaInterface $searchCriteria): GridData
    {
        $gridData = $this->dataFactory->getData($searchCriteria);
        $modifiedRecords = $this->applyModifications($gridData->getRecords());
        return new GridData($modifiedRecords, $gridData->getRecordsTotal(), $gridData->getQuery());
    }
}

Reference: Check existing *GridDataFactory decorators in src/Adapter/ for examples.

Rules

Conventions (column alias matching, parameterized queries, PK aliasing, count query rules, decoration preference) are in [Grid/CONTEXT.md](../../CONTEXT.md#query-builders).

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.