Model podmínka (if „něco jsem tam našel“)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
simPod
Člen | 383
+
0
-

Pokusil jsem se udelat v modulu podminku pomoci

if ($this->connection->table('subscription')->where('email', $email)->where('activated', 0)) {
...
}

tzn. pokud najde neco kde se email rovna $email a activated se rovna 0. Bohuzel to zrejme vzdy vrati TRUE, at uz tento dotaz na databazi najde cokoliv

Co delam spatne? Diky

Ani
Člen | 226
+
0
-

Ne že bych někdy zkoumal nette\database, ale určitě by jsi měl v laděnce vydět sql dotaz z něj poznáš hned jaký dotaz to tvoři a co to vrací, když by to skutečně vracelo true i při neexistenci záznamů, mělo by jít použít ->count(„*“).

nanuqcz
Člen | 822
+
0
-

Metoda where() totiž v základu vrací Nette\Database\Table\Selection, na výsledky z databáze se to převádí automaticky, až když to použiješ v cyklu foreach (díky implementaci rozhraní Iterator). Pokud chceš výsledky natahat ručně, slouží k tomu metoda fetch()

if ($this->connection->table('subscription')->where('email', $email)->where('activated', 0)->fetch()) {
    ...
}

V tvojem případě ale bude možná hezčí použít count()

if ($this->connection->table('subscription')->where('email', $email)->where('activated', 0)->count()) {
    ...
}

Více kdyžtak v dokumentaci, nebo v API

rixi
Člen | 109
+
0
-

nemam to odskusane, ale mohlo by fungovat aj:

$select = $this->connection->table('subscription')->where('email', $email)->where('activated', 0);

if (count($select) > 0) {
...
}
simPod
Člen | 383
+
0
-

funguje, dekuji (pouzil jsem obivanovo reseni, ale rixiho asi bude taky fungovat)