Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 2 lety

musa
Člen
Registrovaný: 8. 9. 2009
Příspěvky: 33

Stala podminka pro vsechny dotazy

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?

 

#2 před 2 lety

Petr Motejlek
dibi guru
Registrovaný: 9. 1. 2009
Příspěvky: 325

Re: Stala podminka pro vsechny dotazy

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

 

#3 před 2 lety

musa
Člen
Registrovaný: 8. 9. 2009
Příspěvky: 33

Re: Stala podminka pro vsechny dotazy

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.

 

Zápatí