přetypování smallint → timestamp (?)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jik
Člen | 146
+
0
-

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 !

hrach
Člen | 1834
+
0
-

Projdou ti nette testy? zvlaste Statement.normalizeRow.postgre.phpt?

Milo
Nette Core | 1283
+
0
-

Pokud Ti projde ten test, co píše @hrach, postni sem ještě kód/query, kterým to z databáze taháš. Tipnul bych si, že bude nějak nestandardně nastaven výchozí DateStyle.

jik
Člen | 146
+
0
-

hm… testování, k tomu jsem se ještě nějak nedostal… Nezlobil bych se, kdyby byl tutorial doplněn o testování…

Ale:

  1. zjistil jsem, že Nette 2.0.8 ovladače pro PostgreSQL má, tak jsem na něj přešel.
  2. 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.

enumag
Člen | 2118
+
+1
-

@jik: Tvůj kód z posledního příspěvku má jeden zásadní problém. To že existuje identita ještě neznamená, že uživatel je přihlášen. Identita se totiž po automatickém odhlášení zachovává. Tzn. měl bys používat $user->isLoggedIn().