Oznámení
Jak vynutit datový typ TIME
před 6 lety
- CZechBoY
- Člen | 3258
Zdravim,
chtěl bych se zeptat jak vynutit datový typ TIME jednomu sloupci.
Používám Dibi Fluent a když zavolám funkci setType tak mi to hodí chybu se
špatným SQL dotazem. :-(
Když si to sám přetypuju přes strtotime tak mi to vyhodí error, že
DibiDateTime nemá property date – musim použít nějaký dump, který tam
tu property dostane… wtf?
před 6 lety
- Milo
- Nette Core | 1119
Vynutit kdy? Dáš sem příklad s tím SQL dotazem?
před 6 lety
- CZechBoY
- Člen | 3258
jasně
$result = $conn->select('start')->from('reservations')->where('id = %i', $id);
dibi naformátuje start jako DateTime, přičemž v databázi je pouze čas → datum je dnešní (bohužel špatné)
před 6 lety
- Milo
- Nette Core | 1119
Aby's nedostal SQL error, musíš ten dotaz před setType()
nejprve spustit pomocí execute()
. Jinak se to bere jako
pokračování SQL dotazu.
$result = $conn->select('start')->from('reservations')->where('id = %i', $id)->execute()->setType('start', dibi::TIME);
No, ale Tobě to přetypování vůbec nepomůže, protože Dibi ukládá
čas stejně jako datum v DateTime objektu. V PHP totiž na samostatný čas
třída není. Můžeš ale při výpisu hodnotu snadno přeformátovat:
$row->start->format('H:i:s')
.
Editoval Milo (5. 3. 2013 11:03)
před 6 lety
- CZechBoY
- Člen | 3258
jojo to jsem taky zkoušel, asi dělám něco špatně, protože mi to hláší, že nezná start
$result = $conn->select('start')->from('terms')->where('id_reservation = %i', $id);
$result->execute();
//$rows = $result->fetchAll();
$terms = array();
foreach($result->fetch() as $r) {
$terms[] = $r->start->format('H:i');
}
jo už mi to funguje, když dám pryč ten start :-)
$result = $conn->select('start')->from('terms')->where('id_reservation = %i', $id);
$result->execute();
$terms = array();
foreach($result->fetch() as $r) {
$terms[] = $r->format('H:i');
}
díky
Editoval CZechBoY (5. 3. 2013 11:24)
před 6 lety
- Milo
- Nette Core | 1119
$result->fetch === jeden řádek
foreach ($result as $row) {
$row->start->format(...);
}
před 6 lety
- CZechBoY
- Člen | 3258
a jak teda projedu všechny řádky?
musim dát $result->fetchAll() a potom přes foreach($result as $row) ?
před 6 lety
- Milo
- Nette Core | 1119
Můžeš tak i tak, $result
je iterátor.
$rows = $db->select(...)->from(...)->fetchAll(); // vytáhne všechny řádky do pole = zabere paměť
foreach ($rows as $row) {
}
$result = $db->select(...)->from(...)->execute(); // dotaz se jen spustí
foreach ($result as $row) { // tahá se řádek po řádku = paměťová úspora
}
Druhý způsob je dobrý návyk. Ale jestli taháš 10 řádků tak je to fuk.
Editoval Milo (5. 3. 2013 11:56)
před 6 lety
- CZechBoY
- Člen | 3258
ok dík
jsem dal pryč ten execute a pohroma byla na světě :D