Oznámení
DibiResult a detectType()
před 11 lety
- edke
- Člen | 198
@David:
Presne dnes som nieco podobne mal v plane spravit ako rozsirenie pre
DibiTable. Ako som sa rozbiehal, zacal som sa preluskavat cez DibiTable->types,
DibiResult->setTypes()
a DibiResult->convert()
a prisiel som nato, ze ty tam uz nieco podobne mas. Teda to len zautomatizovat.
Nakoniec som skoncil pri implementovani
DibiPostgreDriver->getColumns()
a DibiPostgreDriver->getIndexes()
a zatial si commit-ol
DibiResult->detectTypes()
, co som uz skusal a vyzera to vyborne.
Zaujima ma, ci mas plan to nejako implementovat aj do DibiTable. Bolo by pekne, keby sa to dalo zapnut napriklad pri:
$model->fetch( 5 );
před 11 lety
- David Grudl
- Nette Core | 6806
Bude se to zapínat takto:
class Products extends DibiTable
{
protected $types = TRUE;
}
před 11 lety
- edke
- Člen | 198
David Grudl wrote:
Bude se to zapínat takto:
class Products extends DibiTable { protected $types = TRUE; }
Hm, a nebolo by lepsie oddelit bool flag pre zapinanie autodetekcie typov a manualnej definicie cez pole ? Bolo by mozne to potom vyhodne kombinovat. Uvediem priklad:
Pri autodetekcii automaticky sa konvertuju datumy na timestamp. Takto by som ale mohol nechat vsetko ostatne na autodetekciu a napriklad aj dalsie datumy konvertovat na timestamp ale pre jeden konkretny by som potom mohol definovat napriklad format:
class clanok extends DibiTable
{
protected $types= array(
'datum_vznik' => array('type' => dibi::FIELD_DATETIME, 'format' => 'd.m.Y H:i:s'),
);
protected $autodetectTypes= true;
}
Vysledok po fetch() by potom bol:
object(DibiRow)[61]
public 'id_vlastnik' => int 31
public 'datum_vznik' => string '11.07.2008 08:24:00' (length=19)
public 'datum_zmena' => int 1215757440
před 10 lety
- RaR
- Člen | 42
Ahojte
pokud vyjdu z nového examle Akrabat.form, kde už není DibiTable použitá,
jak přetypuji datové pole z timestamp na D.m.Y a naopak? Všude je to
popisováno pomocí setType a dibiTable, ale v novém modelu to nějak
nefunguje.
<?php
class Table extends Object
{
/** @var string */
private $table = 'mySqlTable';
/** @var DibiConnection */
private $connection;
protected $types= array('termineDate' => array('type' => dibi::FIELD_DATETIME, 'format' => 'd.m.Y'),);
public static function initialize()
{
dibi::connect(Environment::getConfig('database'));
}
public function __construct()
{
$this->connection = dibi::getConnection();
}
public function findAll() // toto jde do šablony, potřebuji převést timestamp na datum
{
return $this->connection->select('*')->from($this->table);
}
public function find($id) // toto jde do formuláře, převod timestamp na datum
{
return $this->connection->select('*')->from($this->table)->where('id=%i', id);
}
public function update($id, array $data) // toto jde z formuláře, převod datumu na timestamp
{
return $this->connection->update($this->table, $data)->where('id=%i', id)->execute();
}
public function insert(array $data) // toto jde z formuláře, převod datumu na timestamp
{
return $this->connection->insert($this->table, $data)->execute(dibi::IDENTIFIER);
}
...
?>
Třída Table je Object a ne DibiTable(kde $types fungovalo). Jak z toho ven? Asi by šlo přetypovat před vykreslením v šabloně a před načtením defaultníh hodnot do formuláře a po odeslání dat z formuláře, ale to je asi zbytečně složitý. Děkuji za každou radu.
před 10 lety
- David Grudl
- Nette Core | 6806
Hmmm, pro tohle zatím není hotová podpora