Nette selection reference
- mimacala
- Člen | 113
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>
|
<a n:href="default, $page - 1">Předchozí</a>
|
{/if}
Stránka {$page} z {$lastPage}
{if $page < $lastPage}
|
<a n:href="default, $page + 1">Další</a>
|
<a n:href="default, $lastPage">Poslední</a>
{/if}
- Marek Bartoš
- Nette Blogger | 1280
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)
- Kcko
- Člen | 470
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 | 822
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
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 | 822
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
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
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);