Jak vykonat pomocí třídy Database nativní funkci MySQL (jako např. NOW())?
- Pudlík
- Člen | 8
Zdravím všechny,
mám asi stupidní dotaz, ale zaboha nechápu, jak udělat toto, aniž bych musel použít „exec“ či „query“. Jde to vůbec?
articles->find($id)->update(array(
"changedDate" => "NOW()",
));
V dokumentaci k ORM jsem našel např ⇒ new NotORM_Literal(„NOW()“), ale tady mi to nefunguje, samozřejmě.
Jak na to, poradíte?
Velmi děkuji za nakopnutí!
Používám k DB přístupu model, dle příkladů ze Sandboxu:
$this->articles = $this->getService('model')->getArticles();
Editoval Pudlík (29. 7. 2011 1:32)
- h4kuna
- Backer | 740
rixi napsal(a):
Ahoj, ja to riesim takto:
articles->find($id)->update(array( "changedDate" => new DateTime, // new DateTime53 v PHP5.2 ));
Toto řešení má skrytou chybku. Pokud budeš mít dva stroje apache/databaze tak můžou mít rozdílný čas (cca minuty) a stalo se že člověk vložil příspěvek a pak to psalo: příspěvek byl vložen ‚za okamžik‘.
Já využívám převážně datumů z databáze a ty pak předávám DateTime() jako parametr, proto bych se klonil k verzi s NOW().
- Filip Procházka
- Moderator | 4668
A tohle znáte?
$this->getService('model')->getArticles()->find($id)->update(array(
"changedDate" => new Nette\Database\SqlLiteral('NOW()'),
));
Nevím jestli to bude fungovat, ale příště zkuste třeba prostudovat API, když vám bude na něco chybět dokumentace…