Nette selection reference

mimacala
Člen | 113
+
0
-

Zdravím,
prosím proč si nette myslí, že někde uvádím referenci „$0_reklamace->0_reklamace“ ?
„No reference found for $0_reklamace->0_reklamace.“

Nikde ji uvedenou nemám, nebo nette selection hledá stejnojmenný sloupec v db ? i po přejmenování sloupce to vyhazuje stejnou chybu.
Děkuji

function ZjistiTabulku()
   {
             /////////Zjistí název tabulky pro vytvoření reklamace////////////
         $ic = $this->db->table("uzivatele")
                  ->where("id" ,$this->user->getId())
                  ->fetch();
          $nztabulky = $ic->IC . "_reklamace";
          return $nztabulky;
        //////////////////////////////////////////////////////////////////////
   }
   public function VypisReklamace()
	{
		return $this->db->table($this->ZjistiTabulku());
	}

   public function renderVypis(int $page = 1)
   {

       $lastPage = 0;

       $this->template->reklamace = $this->VypisReklamace()->page($page,10,$lastPage);

       $this->template->page = $page;
       $this->template->lastPage = $lastPage;

   }

tady je latte

 {foreach $reklamace as $s} //na tomto řádku to hlásí chybu s referencí :/
    <tr>
      <td><a  class="btn btn-primary">{$s->cislo_reklamace}</a></td>
      <td>{$s->zbozi}</td>
      <td>{$s->jmeno}</td>
      <td>{$s->prijmeni}</td>
      <td>{$s->telefon}</td>
      <td>{$s->email}</td>
      <td>{$s->datum_vytvoreni|date:'j. n. Y'}</td>
    </tr>
    {/foreach}
  </tbody>
</table>

	{if $page > 1}
		<a n:href="default, 1">První</a>
		&nbsp;|&nbsp;
		<a n:href="default, $page - 1">Předchozí</a>
		&nbsp;|&nbsp;
	{/if}

	Stránka {$page} z {$lastPage}

	{if $page < $lastPage}
		&nbsp;|&nbsp;
		<a n:href="default, $page + 1">Další</a>
		&nbsp;|&nbsp;
		<a n:href="default, $lastPage">Poslední</a>
	{/if}
Ages
Člen | 128
+
0
-

Ahoj,
Co dumpni si $ic->IC
Pravděpodobně to bude 0 nebo null

mimacala
Člen | 113
+
0
-

Ahoj,
nene toto funguje dobře, pro jistotu jsem dumpnul, ale vyhodí mi to název tabulky v db „0_reklamce“. Ten je správný.

Marek Bartoš
Nette Blogger | 1167
+
0
-

A kde ti Tracy ukazuje, že ta chyba je?


Mít tabulku per-user je hrozně zbytečný. Až se dostaneš na miliardy záznamů, tak si teprve můžeš říct, že databázová tabulka sama o sobě nestačí a řešení určitě nebude vytvářet těch tabulek víc.

Editoval Marek Bartoš (3. 3. 2022 21:49)

mimacala
Člen | 113
+
0
-

Ahoj,
chybu to ukazuje tady
viz. kód výše

 {foreach $reklamace as $s}

No je to myšlené tak, že každý uživatel bude mít vlastní tabulku přesně tak, kvůli množství.
Jak tedy vyřešit případné tisícové množství dat ?
Moc děkuji

Ages
Člen | 128
+
0
-

Zkus ještě dump $this->VypisReklamace()->page($page,10,$lastPage) v té render metodě.

Kcko
Člen | 465
+
+2
-

mimacala napsal(a):

Ahoj,
chybu to ukazuje tady
viz. kód výše

 {foreach $reklamace as $s}

No je to myšlené tak, že každý uživatel bude mít vlastní tabulku přesně tak, kvůli množství.
Jak tedy vyřešit případné tisícové množství dat ?
Moc děkuji

To je antipattern. Tisíce, staticíce řádků v tabulce fakt není problém. Předělej to.

Kamil Valenta
Člen | 762
+
0
-

Každá RDBMS má nějaký limit na množství vět (z dosavadního není patrno, zda je to MySQL, PG…), ale ani starší verze MySQL jej nemá v řádu tisíců.
Kdyby skutečně bylo potřeba (v tomto případě s největší pravděpodobností není) dělit to na více tabulek, jistě se dá najít vhodnější způsob, pohledej si „partitioning“ u dané RDBMS.

Nic z dosud uvedeného ale neřeší podstatu chyby, která by se tak jako tak vyskytovat neměla.
Jaká je struktura tabulky 0_reklamace? Jaké jsou v ní FK?
Jaký je dump($this->VypisReklamace()->limit(1)->fetch());

mimacala
Člen | 113
+
0
-

Pokud v renderu smažu page, tak vše funguje vypíše se celá tabulka, ale bez se stránkování, což je nepraktické.
Potom tedy vložím do renderu dump($this->VypisReklamace()->limit(1)->fetch()); ⇒ vyhodí mi to stejnou chybu jako nahoře.
Pripadá mi, že pokaždé když se snažím zavolat na $this->VypisReklamace() nějakou akci jako třeba ->limit ->fetch nebo ->page
hodí mi to tu stejnou chybu.

Kamil Valenta
Člen | 762
+
0
-

Jaká je struktura tabulky 0_reklamace? Jaké jsou v ní FK?
Jaký SQL dotaz se při dumpu s ->limit(1)->fetch() vygeneroval v Tracy?

Editoval Kamil Valenta (4. 3. 2022 12:53)

mimacala
Člen | 113
+
0
-

tabulka

CREATE TABLE `0_reklamace` (
	`id` INT(255) NOT NULL AUTO_INCREMENT,
	`cislo_reklamace` BIGINT(20) NOT NULL,
	`uzivatel` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci',
	`zbozi` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci',
	`imei` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci',
	`datum` DATETIME NOT NULL,
	`datum_vytvoreni` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	`zavada` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci',
	`jmeno` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci',
	`prijmeni` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci',
	`telefon` INT(11) NOT NULL,
	`email` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci',
	PRIMARY KEY (`id`) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
AUTO_INCREMENT=35
;

Tracy vyhodila stejnou chybu akorát na řádek toho dumpu.
Tudíž se mi nic neukázalo, vždycky když na to zavolám ->limit nebo ->page hodí to tu chybu.

Jinak tracy v Queries ukázala Toto

SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_NAME = '0_reklamace'
mimacala
Člen | 113
+
0
-

Všem moc děkuji
kdyby někdo měl stejný problém chyba byla ve funkci page().
Problém vyřešen tím, že bylo přidáno order().
Nikde jsem se nic nedočel, že je to potřebné, ale nejspíše to uspořádalo data.

$reklamace2 = $this->db->table($this->ZjistiTabulku())
                        ->order("datum");

$this->template->reklamace = $reklamace2->page($page,10,$lastPage);