Podmínka v presenteru na základě databáze

DodiseK
Člen | 56
+
0
-

Zdravím, rád bych se zeptal, zda existuje možnost, jak udělat podmínku v presenteru, že po přihlášení, pokud hráč není v databázi a nemá tam nastavenou žádnou hodnotu, tak aby mu to nějakou vytvořilo.

David Matějka
Moderator | 6445
+
0
-

ano, s cim si konkretne nevis rady? proste das do action neco jako

if (!$this->someModel->getSomeValue()) {
	$this->someModel->setSomeValue();
}
DodiseK
Člen | 56
+
0
-

No, nevím, jak přesně to definovat

DodiseK
Člen | 56
+
0
-

Napadlo mě něco takového

if (!$this->database->table('ranksystem')->where('name = ?', $user)) {
    $this->database->table('ranksystem')->insert([
        'name' => $user,
        'rank' => "Hráč",
        'style' => "Hráč",
    ]);
}

Ale nefunguje to podle představ.

David Matějka
Moderator | 6445
+
+1
-

where vraci selection, takze ta podminka bude vzdy vyhodnocena jako pravdiva – ten objekt existuje a dotaz se vubec neprovede. musis na tom zavolat treba fetch(), viz https://doc.nette.org/…ase/explorer#…

MajklNajt
Člen | 502
+
0
-

@DodiseK trošku konkrétnejšie keby si povedal, čo to má spraviť a čo to reálne spraví, keď to nie je podľa tvojich predstáv?

DodiseK
Člen | 56
+
0
-

Dobře, vysvětlím celou věc…
Mám stránku pro hru, na které je například příspěvek, který hráči mohou komentovat.
Ti hráči mají dané hodnosti v té hře a já bych ty hodnosti rád vypisoval na tom webu. Tudíž to mám na databázi, ale prozatím bych rád udělal, že pokud se hráč přihlásí, tak to zkontroluje, zda je zapsaný v databázi a zda má nějakou hodnost, pokud by to zjistilo, že není, tak by to vytvořilo nový řádek, kde by byla aspoň základní hodnost Hráč…
Jelikož pro komentování a tak musí mít uživatel definovanou roli.

DodiseK
Člen | 56
+
0
-

Už se mi to povedlo udělat a funguje to.

if (!$this->database->table('ranksystem')->get('name = ?', $user)) {
    $this->database->table('ranksystem')->insert([
        'name' => $user,
        'rank' => "Hráč",
        'style' => "Hráč",
    ]);
}
DodiseK
Člen | 56
+
0
-

Tak jsem zjistil, že v tuto chvíli to je zase pořád vyhodnocené jako pravdivé

Mysteria
Člen | 797
+
0
-

Protože get vytahuje záznam dle primárního klíče. Potřebuješ tam mít

$this->database->table('ranksystem')->where('name = ?', $user)->fetch()
DodiseK
Člen | 56
+
0
-

Už to funguje, děkuji moc, zkoušel jsem where i ten fetch, ale nefungovalo to, nenapadlo mě, že to musím zkonbinovat