tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

DibiFluent::where – možné kombinace parametrů

chikeet
Člen | 149
+
0
-

Zdravím,
moje otázka je tak triviální, že je mi až stydno ji vůbec pokládat, ale nikde k ní nemůžu dohledat jasné informace. Takže: jaké jsou možné kombinace parametrů metody DibiFluent::where?

Podle API bere metoda jeden parametr $cond, o kterém ale nic bližšího nevím. V různých příkladech je ale volána i s více parametry.

Možnosti, které mě napadají:

// 1.
->where("something = '$someValue'");
// nechci používat, protože tak přicházím o možnost escapování vložené proměnné, kterou, jak doufám, dibi provádí

// 2.
->where('something = ?', $someValue);
// můžu použít? Předpokládám, že tady se proměnná escapuje. A co třeba nahradit otazník %s? Liší se nějak použití nebo výsledný výstup?

// 3.
->where('((something = ?) OR (something_else = ?))', [$someValue, $anotherValue]);
// můžu použít? Vím, že to umí NetteDatabase, ale u dibi si nejsem jistá. A co třeba použít jen jednu proměnnou místo pole stejných hodnot?
// Je nutné uzavírat celý OR do závorek, nebo je to zbytečné a dibi to udělá automaticky?

//4. nějaké další možnosti?

Pokud jsou tyhle informace někde k dohledání, tak mě prosím odkažte do patřičných mezí :-) Předem díky.

Editoval chikeet (9. 1. 2015 20:05)

Milo
Moderator | 1031
+
+1
-

Když se podíváš do zdrojového kódu DibiFluent, najdeš tam, že where() je magická metoda, ostatně jako skoro všechny. To je princip DibiFluentu.

Pak se podívej na statické proměnné DibiFluent, jako jsou $modifiers a $separators. Ty určují chování, které se pro metody použije.

Variantu // 1. nepoužívej, to je bezpečnostní díra.

Dá to celkem práci, naučit se jak se co překládá, ale od toho tu je ->test(). Podrobná dokumentace na tohle téma, myslím, neexistuje.