Ublaboo datagrid, přiohnutí filtru

Roman Halaxa
Člen | 60
+
0
-

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ěď.

Roman Halaxa
Člen | 60
+
0
-

Předpokládal jsem že nikdo nebude vědět. Díky za přečtení :)

F.Vesely
Člen | 369
+
+1
-

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
+
0
-

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