Nette\Database – jak editovat mysql hodnoty?

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

Ahoj, narazil jsem na takový zvláštní problém. Předpokládm, že to bude jen hloupost a něco nechápu nebo přehlížím, ale už vážně nevím kam kouknout.

Mám v DB položku datetime a chtěl bych do ní přiřadit hodnotu z mysql fce NOW(). Bez DB layeru stačilo napsat do dotazu '... , polozka = NOW(), ... ' a vse OK, ale zde mi to nefunguje – po vložení (z pole hodnot) 'polozka' => 'NOW()' je položka nulová.

Chápu, že to bude nějaká vlastnost toho layeru. Například co je v apostrofech je string a pokud to dávám do něčeho co není textové, tak se to nějak eliminuje. Ale u toho NOW() mě opravdu nenapadá jak jinak to tam vnutit.

Jak se tedy dají vkládát přes DB layer hodnoty, které zná mysql?

Editoval futuretux (28. 8. 2011 9:33)

jh
Člen | 22
+
0
-

Tohle funguje normálně:

<?php
$con->table('pokus')->insert(array('cas' => new \Nette\Database\SqlLiteral('NOW()')));
?>
jh
Člen | 22
+
0
-

Nebo

<?php
$con->table('pokus')->insert(array('cas' => new \DateTime()));
?>
futuretux
Člen | 24
+
0
-

Aha, výborně. Funguje to. Děkuji mnohokrát.

Nicméně tohle je velmi žhavý kandidát na zapsání do https://doc.nette.org/cs/database

bojovyletoun
Člen | 667
+
0
-

no když vidím „new \Nette\Database\SqlLiteral“, tak by mi upadla ruka → je téměř nutnost vytvořit si alias function sqlit($s){return new \Nette\Database\SqlLiteral($s);}

Tharos
Člen | 1030
+
0
-

@bojovyletoun: Samozřejmě tedy proti gustu žádný dišputát, ale dávej si pozor, abys o tu ruku stejně nakonec nepřišel – totiž aby Ti ji třeba náhodou neurval někdo, kdo s tím Tvým kódem bude muset jednou pracovat :).

Znáš kouzelné slůvko (tj. klíčové slovo) use? :)

use Nette\Database\SqlLiteral;
new SqlLiteral(...);

Edit: Asi to slůvko znáš, protože ho koukám používáš i ve svém podpise :). Tím spíš mě ten Tvůj post zaráží…

Editoval Tharos (18. 9. 2011 0:11)