via composer:
composer require adt/query-object-data-sourceand in config.neon:
extensions:
- ADT\QueryObjectDataSource\DI\QueryObjectDataSourceExtensionInject or autowire QueryObjectDataSourceFactory:
/** @var \ADT\QueryObjectDataSource\IQueryObjectDataSourceFactory @autowire */
protected $queryObjectDataSourceFactory;Create query object and wrap it as data source:
$qo = /* create query object */;
$dataSource = $this->queryObjectDataSourceFactory->create($qo, "id")
->setSortCallback(function($queryObject, \Ublaboo\DataGrid\Utils\Sorting $sorting) {
$sort = $sorting->getSort();
if (!empty($sort)) {
foreach ($sort as $order => $by) {
$queryObject->order("e.$order", $by);
}
}
})
->setFilterCallback(function ($queryObject, array $filter) {
foreach ($filter as $field => $value) {
$queryObject->{'by' . $field}($value);
}
});
$grid->setDataSource($queryObjectDataSource);