tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Stala podminka pro vsechny dotazy

před 10 lety

musa
Člen | 30

Ahoj,

je nejak mozne v dibi zajistit aby se ke kazdemu dotazu (select, update, delete) doplnila podminka do where casti? Jde mi konkretne o db kde ma vetsina tabulek sloupec subsystem_id a ja po prihlaseni potrebuju aby uzivatel pracoval uz jen pouze v tomto subsystemu, zaroven bych ale nerad u kazdeho dotazu dopisoval „subsystem_id=%i', $subsys_id,“ (mozna to nejde z principu, nevim). V podstate se jedna o neco podobneho jako @where anotace u hibernate anotations nad tridou entity.

Napada me si podedit dibi a doplnit metodu squery(), ktera by prosla dotaz, nasla where a doplnila podminku uvedenou vysse a nasledne zavolala query(). Pripadne pro fluent rozhrani vytvorit sselect fungujici podobne. Dalsi reseni je tedy opravdu to u kazdeho dotazu dopsat. Ani jedno se mi ale moc nelibi.

Muze me v tomhle tedy dibi nejak pomoct?

před 10 lety

Petr Motejlek
Člen | 293

Tohle zní jako dost specifická záležitost a IMHO se extenzi nevyhneš…

před 10 lety

musa
Člen | 30

Nakonec sem to tedy vyresil drobnou upravou DibiTranslator.php tak aby bylo mozne si zaregistrovat callback naveseny uplne na konci metody translate, ktery ma jako parametr sql string a vraci ho upraveny dle potreby.

Subsystemy odlisuju pomoci persistentniho parametru (example.com/subsystem1) pokud neni uzivatel prihlasen. Pokud se prihlasi pak je ulozeno id subsystemu v session (v tu chvili je url uz jen kosmeticka, callback si id bere uz pouze ze session).

Callback ma pak k dispozici id subsystemu (ze session nebo url) a seznam tabulek, ktere maji sloupec subsystem_id. Kazdy dotaz je pak zkontrolovan a pokud pouziva nekterou ze „subsystemovych“ tabulek tak je doplnena podminka do WHERE filtrujici data jen pro tento subsystem (pro SELECT, UPDATE, REPLACE, DELETE). U INSERT se pak doplni vlozeni subsystem_id.