přetypování smallint → timestamp (?)
- jik
- Člen | 149
OpenSUSE 12.1, 12.2 (php 5.3.8, postgreSQL 9.1.1) a 12.3 (beta a rc; php 5.3.17, PostgreSQL 9.2), devel verze Nette 2.1 (stažená v pátek 22.2.)
Opravdu nevím, jestli neděláme někde nějakou strašnou botu, ale:
Mám tabulky:
create table rok (
id smallint unique primary key,
termin date
);
create table users (
id serial primary key,
rok_id smallint references rok,
username varchar(25) unique,
...
);
Poznámka: user je pro PostgreSQL rezervované slovo, proto users
BasePresenter.php obsahuje:
<?php
protected function startup() {
parent::startup();
$this->authenticator = $this->context->authenticator;
if ($this->user->getIdentity()) { //existuje identita?
$this->rok = $this->user->getIdentity()->rok_id; // nastav rok
$this->template->rok = $this->rok;
...
}
}
?>
Toto provozuji na 4 PC čistě s OpenSUSE (všechny uvedené verze bez jakýchkoliv problémů). Ale chci zapojit kolegu s win7, tak jsem, obávaje se odchylek php na win, mu nainstaloval virtualbox a na ně OpenSUSE 12.2 – a na tom běžel webový server. Nechápu proč, ale v proměnné $this->rok se namísto integeru 2013 objevila hodnota ‚2013–01–01 00:00:00‘, tedy položka se ‚přetypovala‘ na timestamp !
- jik
- Člen | 149
hm… testování, k tomu jsem se ještě nějak nedostal… Nezlobil bych se, kdyby byl tutorial doplněn o testování…
Ale:
- zjistil jsem, že Nette 2.0.8 ovladače pro PostgreSQL má, tak jsem na něj přešel.
- po nějakém laborování si myslím, že to je záležitost getIdentity() a mojí neznalosti objektového programování. Upravil jsem BasePresenter.php:
<?php
protected function startup() {
parent::startup();
$this->authenticator = $this->context->authenticator;
if ($this->user->getIdentity()) { //existuje identita?
$this->uid = $this->user->getIdentity()->id;
$o_user = $this->context->users->getUser($this->uid);
$this->rok = $o_user->kor; // nastav rok
...
}
}
?>
a jede to jak má ve všech případech.