Databaze vrati 2 radky, ale do presenteru se dostane pouze jeden
- HonzsSedlomn
- Člen | 7
Zdravim, mam velice specificky problem a neumim si ho vysvetlit. Mozna nekde nevidim nejakou chybku.
Vytahuju z tabulky data, kde cizi klic jmenem user_one_id = 2.. Tomu odpovidaji 2 radky.. Podle TRACY queries se mi vrati 2 radky, ovsem do presenteru se dostane pouze jeden. Jak je to mozne?
Zde prikladam obrazek toho, ze z databaze (posledni query) vyjdou 2 radky, ale kdyz tu promennou dumpnu, tak se mi ukaze pouze jedna. Uz jsem nad tim stravil 2 dny a porad nevim.
Zde jeste doplnuju kody z manageru, a presenteru
PS: select(‚*‘) tam mam z duvodu, ze bez toho mi to vraci pouze hodnotu user_one_id. Jen takova dalsi podivnost.
//Manager
public function getAllRelationships($id){
return $this->database->table(self::TABLE_NAME)->select('*')->where('user_one_id = ?', $id)->fetchAll();
}
//Presenter
public function actionDefault(){
$this->template->relationships = $this->relationshipManager->getAllRelationships($this->user->getId());
}
Editoval HonzsSedlomn (19. 5. 2017 21:33)
- HonzsSedlomn
- Člen | 7
Dobra… Myslim, ze mam celkem problem.. Zacal jsem to debuggovat.. Nezmenil jsem absolutne nic a ono to najednou funguje. Ovsem se obavam, ze ne na dlouho.
- GEpic
- Člen | 562
Není problém v tom, že ti v tabulce chybí primární klíč? :)
Teď si totiž Nette myslí, že primární klíč je to
user_one_id
a podle toho vytváří i pole (použije
user_one_id
jako PK, protože neví, co jiného použít), no a jak
víš tak v poli nemohou být dva záznamy se stejným klíčem. :)
Viz:
https://api.nette.org/…lection.html#…
/** @var IRow[] modifiable data in [primary key => IRow] format */
protected $data;
Editoval GEpic (20. 5. 2017 1:44)
- filsedla
- Člen | 101
Pokud v tabulce není primární klíč, Nette Database by měla řádky označovat numerickými klíči (číslovanými od nuly), takže by ve výsledném poli měly být všechny řádky. Teď jsem vyzkoušel, že to takhle funguje.
Pokud v tabulce je primární klíč, Nette Database ho použije jako klíč v poli výsledku a pak se teoreticky můžou řádky „ztrácet“, databáze může vracet víc rows než obsahuje výsledne pole apod. Ale v tomhle případě by zase v databázi nemohly být 2 řádky se stejným primárním klíčem.
Chová se to takhle konzistentně, i když vymažeš
temp/cache
? Nette Database si strukturu cachuje, takže po
zásadnějších změnách struktury jako přidání PK je potřeba
cache mazat.