Vypsání datumu a času z dabáze
- wasek2611
- Člen | 17
Chtěl bych se zeptat, jak vytáhnu dateTime z dabatabáze. (resp z tohodle pole)
Nette\Database\Row(1) {
datum => Nette\DateTime(3) {
date => "2013-05-03 00:20:09" (19)
timezone_type => 3
timezone => "Europe/Prague" (13)
}
zkoušel jsem to takhle, ale to nefunguje…jediný co mě napadá je to oříznout nějakym regulárním výrazem, ale nevim, jestli má cenu se s nim dělat, když to musí jít lehce…
$dotaz = $this->connection->query($dotazSelect)->fetch();
$dotaz = $dotaz[date];
- wasek2611
- Člen | 17
Laděnka mi nahlásí chybu:
Use of undefined constant date – assumed ‚date‘
celej kód metody :
$dh = $this->connection;
$dotazSelect= "SELECT MIN(datumOdehrani) AS datum FROM zapas WHERE idSezony=$idSezony ";
$dotaz = $this->connection->query($dotazSelect)->fetchAll();
$dotaz = $dotaz[date]->format("Y-m-d h:i:s");
Debugger::dump($dotaz);
Editoval wasek2611 (6. 5. 2013 23:37)
- wasek2611
- Člen | 17
To jsem taky zkoušel :D (místo fetchAll fetch), pak mi to napíše
Undefined property: Nette\Database\Row::$date
když přidám properu
private $date; tak mi to napíše
syntax error, unexpected T_PRIVATE (když to uvedu v metodě, když to uvedu před konstruktorem, tak mi to napíše opět tu první hlášku)
a když tam nenapíšu fetch ani fetchAll, tak mi to napíše
Cannot use object of type Nette\Database\Statement as array
*************************VYŘEŠENO
už jsem to vyřešil..kdyby něhoko zajímalo:
$dotaz = $this->connection->query($dotazSelect)->fetchColumn(0);
Editoval wasek2611 (7. 5. 2013 0:05)
- Petr Hudík
- Člen | 49
Předpokládám, že to souvisí s tím, že v dotazu máš sloupec, který
se jmenuje datum
, nikoliv date
, proto je zcela
logické, že to sloupec s názvem date
nenašlo a proto ta
chybová zpráva.
Proč vlastně používáš metodu query? Daleko víc cool by bylo použít \Nette\Database\Table\Selection. Poté by dotaz mohl vypadat přibližně takto:
$dotaz = $this->connection->table('zapas')
->select('MIN(datumOdehrani) AS datum')
->where('idSezony', $idSezony)SELECT MIN(datumOdehrani)
- wasek2611
- Člen | 17
tenhle přístup pro query do db se mi ještě nedostal pod kůži :), ale věřím, že pro tyhle primitivní dotazy je lepší. Jsem trochu out v tomhle a radši používám SQL dotazy (prozatím). I když vím, že je to zbytečné psaní apod..
Ale dík za tim, každý takovýhle postřeh, přesně pro potřeby mého dotazu mi pomůže to lépe pochopit. (ono to docela pochopitelný docela je, jen plavu v tom, v jakém pořadí se to má volat). Takto dělané query mám jen tam, kde mám getry stejný, nebo velmi podobné jako v quickstartu.
Jak bys třeba v tom objektovém přístupu k relační db udělal tento dotaz?
$dotazSelect = "SELECT COUNT(*) FROM zapas WHERE idSezony=$idSezony AND stav=2 AND (idDomaci=$idHrace OR idHoste=$idHrace)";
Editoval wasek2611 (7. 5. 2013 0:24)
- Petr Hudík
- Člen | 49
Domnívám se, že rozdíl není ve zbytečném psaní, ale ve spoustě skvělých funkcí navíc. Osobně tento kód považuji za daleko přehlednější. Mohlo by to vypadat přibližně takto:
$countMatches = $this->connection->table('zapas')
->where('idSezony', $idSezony)
->where('stav = 2')
->where('idDomaci = ? OR idHoste = ?', $idHrace, $idHrace)
->count('*');
Při vytváření schématu je dobré dodržovat určité konvence. Psát názvy v angličtině bývá dobrým zvykem, dále se doporučuje pro oddělování slov nepoužívat velké písmeno (camelCase), ale podtržítko například ‚moje_tabulka‘ apod.
Na základě Tvého příkladu předpokládám, že máš tabulky zapasy, sezony, hraci. Velice užitečné je vytvářet mezi nimi spojení, to už je ale zcela jiné téma, přesto doporučuji důkladně prostudovat Dokumentaci – práce s tabulkami.