o5 / grido

Grido - DataGrid for Nette Framework
http://o5.github.io/grido-examples/
MIT License
90 stars 88 forks source link

DataSources\Doctrine - Custom condition #40

Closed o5 closed 11 years ago

o5 commented 11 years ago

Když jsem přidával do sandboxu ukázku Doctrine, zjistil jsem, že driver si nerozumí s custom condition.

Chybu lze nasimulovat přidáním následujícího např. sem.

$grid->addFilterCheck('preferred', 'Only preferred girls :)')
    ->setCondition(Filter::CONDITION_CUSTOM, array(
        TRUE => 'gender = "female" AND centimeters >= 170' //for checked
));

url: http://localhost/grido-sandbox/www/outer/doctrine/default/ajax-off/?grid-filter%5Bpreferred%5D=✓ laděnka: http://goo.gl/42mDT

Podobný problém byl i u Nette\Database.

pepakriz commented 11 years ago

Totéž bude platit i pro ArraySource. Chtělo by to vymyslet nějakou jinou syntaxi filtrování, třeba i méně robustní, ale lehce přenositelnou do jiných driverů. Takhle každý driver musí nějakým způsobem parsovat SQL a dle něj aplikovat filtry. Možná by stačilo udělat jen něco takového:

$conditions = array(
    'foo' => array(Filter::IS_NULL),
    'bar' => array(Filter::LIKE => '%abc%'),
    'foo2' => 32,
    'bar2' => array(Filter::IS_IN => array(2,3,4,5)),
    'foo3' => array(Filter::IS_NOT => 4),
    'date' => array(Filter::IS_GREATER => '2013-04-04'),
);

Nebo rovnou na to udělat nějaký fluent interface. V obyčejném totiž nelze využít OR.

o5 commented 11 years ago

Tohle by chtelo hotfixnout, nez se vyresi tohle https://github.com/o5/grido/issues/42 ..

o5 commented 11 years ago

@Mordred nechce se ti to pls fixnout? Ja tu doctrine moc nechapu :/

Mordred commented 11 years ago

Custom podmienky fungujú. Ako si písal v #42, inšpiroval si sa v Dibi. Takže podľa toho som aj ja napísal ten parser pre Doctrine. Stĺpce musíš dať do hranatých zátvoriek. DQL sa nekamaráti so stringami v úvodzovkách ". Treba použiť apostrofy '.

Viď: https://github.com/o5/grido-sandbox/pull/4

o5 commented 11 years ago

Díky! :)