databaza a stlpec int(5), atribut UNSIGNED ZEROFILL

pn-pm
Člen | 20
+
0
-

mam v DB stlpec definovany ako int(5), s atributom UNSIGNED ZEROFILL a defaultom ‘00000’, takze ked do neho napr zapisem cislo 123, vrati mi ho stare bezne php (5.6, mysql_query) ako 00123, ale Nette to ako integer “pretypuje” na bezny int, a vrati bez nul na zaciatku ja vsak potrebujem vratit korektne celu hodnotu

  • neda sa nejak vratit “neosetrena hodnota” ?
  • vratit hodnota int pretypovana na string, aj s nulami ?

mam problem i s getReflection(), som dufal ze tam zistim ci viem vytiahnut stav atributov stlpca…
s nastavenim php 8.1 v composeri mi nedava ziadny update na vyssiu verziu, ale aj tak mi pada na
Call to undefined method Nette\Database\Connection::getReflection()
a composer mi pise ze mam nette/database v3.1.9 , a reflection je od 3.2.1 tusim ?
ako to tam dostanem ?

	function __construct(
		Nette\Database\Connection $DB,
		Nette\Database\Explorer $Explorer,
		// ..
	) {
		$reflection = $DB->getReflection(); // neprojdes!
	}

zachytil som ze sa vraj da skusit

	$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);

ale to neviem ci je uplne vonco, lebo to meni cely fetch ?

bonusovy dotaz – da sa pouzit Database Conventions – aby extendovalo autodiscovered, a nejak iba tu na konkretne pole si to nejak nastavit v convetions ? aby som nemusel predefinovavat pri zmene tabulek rucne vsecko ?

Editoval pn-pm (16. 10. 12:10)

Marek Bartoš
Nette Blogger | 1274
+
0
-

Nette to ako integer “pretypuje” na bezny int

Nevím, zda je to případ i nette/database, ale většinou se pro numerický string v databázi používá typ decimal. Specificky pro zerofill by bylo fajn se podívat, jak to řeší jiné databázové vrstvy (doctrine, nextras) a napsat případně feature request.

composer mi pise ze mam nette/database v3.1.9 , a reflection je od 3.2.1 tusim ? ako to tam dostanem ?

Zjisti co ti brání v aktualizaci, přes composer why-not nette/database 3.2.1

Editoval Marek Bartoš (16. 10. 12:34)

pn-pm
Člen | 20
+
0
-

Marek Bartoš napsal(a):

Nette to ako integer “pretypuje” na bezny int

Nevím, zda je to případ i nette/database, ale většinou se pro numerický string v databázi používá typ decimal. Specificky pro zerofill by bylo fajn se podívat, jak to řeší jiné databázové vrstvy (doctrine, nextras) a napsat případně feature request.

no uvidme

composer mi pise ze mam nette/database v3.1.9 , a reflection je od 3.2.1 tusim ? ako to tam dostanem ?

Zjisti co ti brání v aktualizaci, přes composer why-not nette/database 3.2.1

ok, trochu zapas s verziami, ale podla navodu na upgrade nette som to nejak rozchodil
https://doc.nette.org/…tions/to-3-2

dost ma nastvalo ze v template som uz v basePResentwru nastavoval $this->template->user, vlastny objekt s rolemi, identitou atd, ne uplne orig typovany „getUser()“… a po prechode mi to zacalo pindat ze v template nesmim nastavit vlastny class na variable user, ze uz je nastaveny, ale zas ked som dal bdump, tak ze nenastaveny… asi je uz nekde natypovany, a to sa i resit nechcelo, ach jo. zabava :D.. premenoval som si variable a ide, ale zas haluza dalsia

kazdopadne, uz mi ide reflecion, a vidim na stlpci

name: '....'
table: Nette\Database\Reflection\Table
nativeType: 'INT'
size: 5
nullable: false
default: '00000'
autoIncrement: false
primary: false
vendor: array
'field' => 'voucher'
'type' => 'int(5) unsigned zerofill'   // <----
'collation' => null
'null' => 'NO'
'key' => ''
'default' => '00000'

takze dokazem nejak aspon si dokazat ze Nette o tom zerofill vie

viem ze existuju nejake SQL literals… ale to su z SQL hotove hodnoty jako now() a pod..
ale nemame v Nette nejaky typecasting pre DB vystup premennych kde sa to zohladni ?

Editoval pn-pm (16. 10. 13:33)

Ozzrel
Generous Backer | 54
+
0
-
<?php
$i = 123;
echo str_pad($i,5,'0',STR_PAD_LEFT);
?>
SELECT LPAD(123, 5, 0);

Editoval Ozzrel (17. 10. 9:52)