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

Zdravím,

chtěl jsem se zeptat čím by mohlo být že mi následující část kódu:

	$this->db->table('material_vany')->fetchAll();

při této struktuře databáze:

id: 0 nazev: Pozink
id: 1 nazev: Nerez

vrací pouze položku Pozink.

Když dám:

	$this->db->table('material_vany')->count();

dostanu 1, ale zas když dám přímo:

	$this->db->table('material_vany')->get(1);

dostanu Nerez. Musí to být nějaký prkotina, ale nevidím to.

Editoval blaztar (23. 7. 2015 19:32)

Mysteria
Člen | 797
+
0
-

Co ti to vygeneruje za dotaz? Když ten vygenerovaný dotaz spustíš třeba v PHPMyAdmin, tak ti vrátí oba řádky?

Jinak místo ->count() používej radši

->count('*')

protože to první ti vybere všechny řádky a interně v PHP spočítá, kdežto to druhé ti vytvoří normální dotazy ve stylu SELECT COUNT(*) FROM table;

blaztar
Člen | 93
+
0
-

Díky za tip s count.

Dotaz i výsledek: obrazek

V phpMyAdminu mi to vrátí oba výsledky, což je asi i vidět na obráyku (rows 2).

Editoval blaztar (23. 7. 2015 19:58)

Unlink
Člen | 298
+
0
-

Veď v tom dotaze je vidieť že by to malo vrátiť tie dva riadky.

A verzia NDBT?

blaztar
Člen | 93
+
0
-

je to instalovaná nedávno.

"require": {
		"php": ">= 5.4.0",
		"nette/application": "~2.3.0",
		"nette/bootstrap": "~2.3.0",
		"nette/caching": "~2.3.0",
		"nette/database": "~2.3.0",
		"nette/di": "~2.3.0",
		"nette/finder": "~2.3.0",
		"nette/forms": "~2.3.0",
		"nette/http": "~2.3.0",
		"nette/mail": "~2.3.0",
		"nette/robot-loader": "~2.3.0",
		"nette/safe-stream": "~2.3.0",
		"nette/security": "~2.3.0",
		"nette/utils": "~2.3.0",
		"latte/latte": "~2.3.0",
		"tracy/tracy": "~2.3.0"
	},

Provedl jsem i update právě a furt stejný problém.

Editoval blaztar (23. 7. 2015 20:06)

Unlink
Člen | 298
+
0
-

Skús ešte zmazať cache.

blaztar
Člen | 93
+
0
-

To jsem zkoušel už dříve. Znova teď a nepomohlo.

Unlink
Člen | 298
+
0
-

Skús dať ešte dump tabuľky aj s dátami, lebo teraz som to skúsil a funguje to normálne.

Zax
Člen | 370
+
0
-

Nebude to nějaká blbost s tím ID=0? Číslovat od nuly není zrovna úplně běžný si myslím, tak jestli to není třeba nějaký bug který s tím souvisí?

Unlink
Člen | 298
+
0
-

Zax napsal(a):

Nebude to nějaká blbost s tím ID=0? Číslovat od nuly není zrovna úplně běžný si myslím, tak jestli to není třeba nějaký bug který s tím souvisí?

No veď preto by som chcel ten dump tej tabuľky, aby sa to dalo nasimulovať, je možné že to je aj tým, ale mne to funguje aj s id = 0

blaztar
Člen | 93
+
0
-

Myslíš takto?

dump($this->db->table('material_vany'));

K čemu konkrétnímu bych se měl v tom dumpu proklikat. Je tam toho hodně.

Jinak ID 0 mám i jinde a tam vše běží.

Číslování se váže ke kódu produktu např: MBK-51–54–12–0 kde právě poslední číslo určuje ten materiál :) proto 0 i v DB.

Editoval blaztar (23. 7. 2015 20:31)

Unlink
Člen | 298
+
0
-

Export databázovej tabuľky som myslel z phpmyadmina alebo adminera.

Editoval Unlink (23. 7. 2015 20:29)

blaztar
Člen | 93
+
0
-

Databáze konfigurator

Struktura tabulky material_vany
Pole Typ NulovĂ˝ VĂ˝chozĂ
id int(10) Ne  
nazev varchar(255) Ne  
Vypisuji data pro tabulku material_vany
1 nerez
0 pozink

Editoval blaztar (23. 7. 2015 20:35)

Unlink
Člen | 298
+
0
-

blaztar napsal(a):

export máš tu

No nejako nejde

sorry, this download link no longer exists :(

Skopíruj to sem na fórum

blaztar
Člen | 93
+
0
-

Nakopíroval jsem to výše. Je to export pro Texy, nesedí asi formátování ale data tam jsou.

Unlink
Člen | 298
+
0
-

Ale ja potrebujem SQL
Lebo vyzerá že to mám také isté, a funguje to.

blaztar
Člen | 93
+
0
-
-- phpMyAdmin SQL Dump
-- version 4.3.11
-- http://www.phpmyadmin.net
--
-- PoÄŤĂtaÄŤ: 127.0.0.1
-- Vytvořeno: Čtv 23. čec 2015, 20:40
-- Verze serveru: 5.6.24
-- Verze PHP: 5.6.8

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Databáze: `konfigurator`
--

-- --------------------------------------------------------

--
-- Struktura tabulky `material_vany`
--

CREATE TABLE IF NOT EXISTS `material_vany` (
  `id` int(10) unsigned NOT NULL,
  `nazev` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Vypisuji data pro tabulku `material_vany`
--

INSERT INTO `material_vany` (`id`, `nazev`) VALUES
(1, 'nerez'),
(0, 'pozink');

--
-- KlĂÄŤe pro exportovanĂ© tabulky
--

--
-- KlĂÄŤe pro tabulku `material_vany`
--
ALTER TABLE `material_vany`
  ADD PRIMARY KEY (`id`), ADD KEY `material_vany_nazev_index` (`nazev`);

--
-- AUTO_INCREMENT pro tabulky
--

--
-- AUTO_INCREMENT pro tabulku `material_vany`
--
ALTER TABLE `material_vany`
  MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Unlink
Člen | 298
+
0
-

No, mysql pri AUTO_INCREMENT berie defaultne 0 ako prázdnu hodnotu, takže dosadí nové ID
ty nastavuješ SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; čo ti dovolí do primárneho kľúča s AUTO_INCREMENT vložiť 0 a zrejme s týmto si NTDB nedokáže poradiť.

Buď zrušíš to AUTO_INCREMENT alebo budeš mať idčka štandardne od 1

Editoval Unlink (23. 7. 2015 20:49)

blaztar
Člen | 93
+
0
-

Mám podobnou tabulku Lišty a tam mi vyjedou všechny výsledky.

Struktura tabulky lista

Pole Typ Nullable
id int(10) Ne
nazev varchar(255) Ne

Vypisuji data pro tabulku lista

0 bez lišty
2 L-lišta
1 U-lišta
3 Z-lišta
array (4)
0 => Nette\Database\Table\ActiveRow #3519
table private => Nette\Database\Table\Selection #4550
data private => array (2)
id => 0
nazev => "bez lišty" (10)
dataRefreshed private => FALSE
2 => Nette\Database\Table\ActiveRow #ebc9
table private => Nette\Database\Table\Selection #4550
data private => array (2)
id => 2
nazev => "L-lišta" (8)
dataRefreshed private => FALSE
1 => Nette\Database\Table\ActiveRow #fccf
table private => Nette\Database\Table\Selection #4550
data private => array (2)
id => 1
nazev => "U-lišta" (8)
dataRefreshed private => FALSE
3 => Nette\Database\Table\ActiveRow #ea2f
table private => Nette\Database\Table\Selection #4550
data private => array (2)
id => 3
nazev => "Z-lišta" (8)
dataRefreshed private => FALSE

Editoval blaztar (23. 7. 2015 20:55)

Unlink
Člen | 298
+
+1
-

Ono je to celkom zaujímavé, že prečo vlastne keď selectuješ z materialov tak ti to najskôr selectne ten s ID 1 a potom ten s ID 0 a v tom druhom máš najskôr to s ID 0

Problém je ale tuna
https://github.com/…election.php#L490

Ono ti to prepíše ten prvý záznam, lebo v php je „0“ false, skúsim spraviť PR a fixnut to.

Zatiaľ to môžeš skúsiť takto:

$this->db->table('material_vany')->order('id')->fetchAll();

Editoval Unlink (23. 7. 2015 21:15)

blaztar
Člen | 93
+
0
-

Super toto funguje:)) Díky