Grid Data Sources

As a data source, the Grid Component requires an implementation of DataSourceInterface.

You can find 4 implementations of the interface in Shopsys Platform.


The most commonly used data source is created from Doctrine Query Builder.

Example of usage

/** @var Doctrine\ORM\EntityManagerInterface $entityManager */

$queryBuilder = $entityManager->createQueryBuilder();

    ->from(Product::class, 'p');

$dataSource = new QueryBuilderDataSource($queryBuilder, '');


This data source is created from query builder as well, and on top of it, it allows to define a callback that is applied on each row so additional data can be set this way, e.g., you can add some calculated price into the data set.

Example of usage

/** @var Shopsys\FrameworkBundle\Model\Transport\TransportRepository $transportRepository */
/** @var Shopsys\FrameworkBundle\Model\Localization\Localization $localization */

$queryBuilder = $transportRepository->getQueryBuilderForAll()
    ->join('t.translations', 'tt', Join::WITH, 'tt.locale = :locale')
    ->setParameter('locale', $localization->getAdminLocale());

$dataSource = new QueryBuilderWithRowManipulatorDataSource(
    function ($row) {
        $transport = $transportRepository->findById($row['t']['id']);
        $row['displayPrice'] = getDisplayPrice($transport);
        return $row;


Data source that is created from an array. It is suitable when you need to display data that are not stored in the database.

Example of usage

/** @var Shopsys\FrameworkBundle\Component\Domain\Domain $domain */

$domainData = [];
foreach ($domain->getAll() as $domainConfig) {
    $domainData[] = [
        'id' => $domainConfig->getId(),
        'name' => $domainConfig->getName(),
        'locale' => $domainConfig->getLocale(),
        'icon' => null,

$dataSource = new ArrayDataSource($domainData, 'id');


A decorator that can be applied to any of the data sources described above. It converts monetary values in a data set to Money value object.

Example of usage

$innerDataSource = new QueryBuilderDataSource($queryBuilder, '');

$dataSource = new MoneyConvertingDataSourceDecorator($innerDataSource, ['ordersSumPrice']);