Databaze vrati 2 radky, ale do presenteru se dostane pouze jeden

HonzsSedlomn
Člen | 7
+
0
-

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.


“:https://ctrlv.cz/LYrt

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
+
0
-

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
+
+1
-

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
+
0
-

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.