Nette\Database\Context fetchAll() vrací jen id řádku

emil54
Člen | 19
+
0
-

Zdravim vsechny,

nepotkal jste se někdo s problémem, kdy vám jednoduchý select vrací na fetchAll() pouze id řádku z tabulky?
Dělá mi to na projektu updatnutém na Nette 3. Na Nette 2.2, 2.4, 2.5 bez problému…
Chová se to fakt divně, někdy to vrátí komplet, ale většinou jen to id. Nepomahá mazat cache.

Předem dík za postřehy, i kdyby z toho vyšlo, že jsem vocas ;)


	$iterations = $this->database->table('task_iteration')->where('user_id = ?', 6)->order('name')->fetchAll();

PHP 7.4.13, mysql Ver 14.14 Distrib 5.7.32, for Linux

nette/database:2.4.10


nette/database:3.0.7


-- phpMyAdmin SQL Dump
-- version 4.6.6deb5ubuntu0.5
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Generation Time: Jan 08, 2021 at 04:23 PM
-- Server version: 5.7.32-0ubuntu0.18.04.1
-- PHP Version: 7.1.33-24+ubuntu18.04.1+deb.sury.org+1

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

--
-- Database: `crmnette3`
--

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

--
-- Table structure for table `task_iteration`
--

CREATE TABLE `task_iteration` (
  `id` int(11) UNSIGNED NOT NULL,
  `name` varchar(128) DEFAULT NULL,
  `description` text,
  `status` tinyint(1) UNSIGNED NOT NULL DEFAULT '2',
  `user_id` int(11) UNSIGNED NOT NULL,
  `project_id` int(1) NOT NULL,
  `start_date` datetime DEFAULT NULL,
  `stop_date` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `created_by` int(11) NOT NULL,
  `completed_at` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `task_iteration`
--

INSERT INTO `task_iteration` (`id`, `name`, `description`, `status`, `user_id`, `project_id`, `start_date`, `stop_date`, `created_at`, `created_by`, `completed_at`) VALUES
(1, 'KABH001001', 'Analyza a rozpocet projektu', 0, 6, 1, '2013-08-25 00:00:00', '2013-09-01 00:00:00', '2013-08-25 00:00:00', 0, NULL);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `task_iteration`
--
ALTER TABLE `task_iteration`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `task_iteration`
--
ALTER TABLE `task_iteration`
  MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;

Raději přidám i composer…

{
	"name": "nette/web-project",
	"description": "Nette: Standard Web Project",
	"keywords": ["nette"],
	"type": "project",
	"license": ["MIT", "BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
	"require": {
		"php": ">= 7.1",
		"nette/application": "^3.0",
		"nette/bootstrap": "^3.0",
		"nette/caching": "^3.0",
		"nette/database": "^3.0",
		"nette/di": "^3.0",
		"nette/finder": "^2.5",
		"nette/forms": "^3.0",
		"nette/http": "^3.0",
		"nette/mail": "^3.0",
		"nette/robot-loader": "^3.0",
		"nette/security": "^3.0",
		"nette/utils": "^3.0",
		"latte/latte": "^2.5",
		"tracy/tracy": "2.7.5",
		"contributte/translation": "^0.4",
		"texy/texy": "^3.1",
		"ublaboo/datagrid": "6.4.0",
		"tomaj/nette-bootstrap-form": "^2.0",
		"nextras/form-components": "^1.0"
	},
	"require-dev": {
		"nette/tester": "^2.0"
	},
	"autoload": {
		"classmap": ["app/Bootstrap.php"]
	},
	"minimum-stability": "stable"
}

Kamil Valenta
Člen | 820
+
0
-

Ale Ty na žádný sloupec nesaháš. Zkus si:

foreach($iterations as $i) {
	dump($i->name);
}

dump($iterations);
Kamil Valenta
Člen | 820
+
0
-

Popsáno zde: https://doc.nette.org/…ase/explorer
Ale není to žádná novinka, i předchozí verze se takto chovaly.

emil54
Člen | 19
+
0
-

No, v předchozich verzích, alespoň v těch, které mi tu prošly compem, se to rozhodně tak nechovalo a nechová.
Mám ve vývojových verzich projektů v presenterech, modelech atd. stabilně dumpnutej každej prd. Dost mi to pomahá při práci. Teď jsem to trochu prolezl a všude, vážně všude to vrací komplet celý.

Jestli to je očekávaná fičura, tak asi moc nechápu její smysl. Nejspiš už jsem starej a je čas s tím seknout a začít sypat ptáčkum do krmítka :-)

Každopádně díky za reakci.

David Grudl
Nette Core | 8227
+
0
-

Pokud ti to vadí jenom kvůli těm dumpům, tak si udělej funkci který řádek v tabulce zamění za $row->toArray()

array_map(fn($r) => $r->toArray(), $rows)
emil54
Člen | 19
+
+1
-

Jasne, ja si na to nejak zvyknu, a neprudim. Jen by mne fakt zajimal duvod… Ale treba na to prijdu, kdyz konecne poradne prolezu zdrojaky.

Jinak, Davide, musim tobe a lidem kolem tebe za praci a usili, ktery do Nette investujete podekovat. Mate muj hlubokej obdiv…

MajklNajt
Člen | 498
+
0
-

emil54 napsal(a):

Jasne, ja si na to nejak zvyknu, a neprudim. Jen by mne fakt zajimal duvod… Ale treba na to prijdu, kdyz konecne poradne prolezu zdrojaky.

Jinak, Davide, musim tobe a lidem kolem tebe za praci a usili, ktery do Nette investujete podekovat. Mate muj hlubokej obdiv…

dôvod je úplne jednoduchý – ťahá sa z databázy iba to, čo potrebuješ, ak nepracuješ so žiadnymi stĺpcami, žiadne sa neťahajú, ak napr. v šablóne použiješ 3 stĺpce z 10, vytiahnu sa iba tieto 3 stĺpce