Ublaboo datagrid, přiohnutí filtru
- Roman Halaxa
- Člen | 60
Zdravím.
Mám menší problémy s filtrem nad jedním z mých sloupečků. Konkrétně nad tímhle:
$grid->addColumnText('roles', $this->translator->translate('spravauzivatelu.sloupce.role'), 'roles.name')
->setAlign('center')
->setRenderer(function($user) {
$roles = $user->getRoles()->toArray();
$roles = array_map(function($roles) { return $roles->getName();}, $roles);
return implode(', ', $roles);
});
Tohle zajistí, že u každého uživatele je sloupec, který obsahuje jeho role oddělené čárkou.
Problém nastává, když chci mít nad tímto sloupcem filtr.
$grid->addFilterText('roles', 'Roles');
Tohle mi neprojde. V moment kdy něco do filtru napíšu, je zachycena následující vyjímka.
Doctrine\ORM\Query\QueryException
[Semantical Error] line 0, col 58 near 'roles LIKE '': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
Způsobuje jí query
SELECT COUNT(a.id)
FROM App\Model\Entities\User a
WHERE a.roles LIKE '%admin%'
Což je pochopitelné, protože a.roles je kolekce a nejde jí tedy porovnávat jako string. A v tom tkví můj problém. Nevím jak udělat aby filtr ukázal jen řádky, které obsahují takový text ve sloupci „roles“.
Předem děkuji za každou odpověď.
- F.Vesely
- Člen | 369
Pouzij setCondition, kde si sam udelas ten where na tebou pouzivanem data source.
$grid->addFilterText('roles', 'Roles')
->setCondition(function($fluent, $value) {
/**
* The data source is here DibiFluent
* No matter what data source you are using,
* prepared data source will be passed as the first parameter of your callback function
*/
$fluent->where('id > ?', strlen($value));
});
- Roman Halaxa
- Člen | 60
F.Vesely napsal(a):
Pouzij setCondition, kde si sam udelas ten where na tebou pouzivanem data source.
$grid->addFilterText('roles', 'Roles') ->setCondition(function($fluent, $value) { /** * The data source is here DibiFluent * No matter what data source you are using, * prepared data source will be passed as the first parameter of your callback function */ $fluent->where('id > ?', strlen($value)); });
Ano, tohle jsem našel, jen jsem nevěděl jak to vlastně napsat pro doctrinu ale už jsem to rozchodil :) Díky