JSON response z activerow
- jirisolc
- Člen | 17
Zdravím,
nedaří se mi odeslat ActiveRow jako JSON response z presenteru.
Kód v repository: (findAll metoda)
$this->database
->table($this->tableName)
->select(implode(',', $this->columns))->fetchAll();
find($id) metoda:
$this->database
->table($this->tableName)
>select(implode(',', $this->columns))
->get($id);;
Kód v presenteru:
public function actionRead(?int $id = null): ?mixed
{
$response = null;
if ($id !== null) {
$response = $this->serviceCategoriesManager->find($id);
if($response === null){
$this->error('Kategorie nenalezena', HttpCodesEnum::NOT_FOUND);
}
} else {
$response = $this->serviceCategoriesManager->findAll();
}
$this->sendJson($response);
}
Pokud do metody pošlu ID a převedu response toArray, vrátí JSON objekt, jaký si představuji. Pokud ale provedu pouze kód výše zmíněný, v případě s ID i bez ID vrátí pouze prázdný objekt (bez ID více prázdných objektů dle počtu řádků v DB).
Příklad vráceného JSON:
{
„1“: {},
„2“: {},
„3“: {},
„4“: {},
„5“: {},
„6“: {},
„7“: {},
„8“: {},
„9“: {}
}
Když $response dumpnu v Tracy, vrací normálně instance ActiveRow i s daty, ale do JSONu se nepřevedou. Viz Screenshot
Kde dělám chybu?
Editoval jirisolc (10. 11. 2021 20:32)
- jirisolc
- Člen | 17
neznamy_uzivatel napsal(a):
Chápu tedy správně, že musím použít
$this->db->query(...)->fetch()
??
- Pavel Kravčík
- Člen | 1196
Další možností je třeba si upravit
\Nette\Database\Drivers\MySqlDriver
a následně pak
options > driverClass
. Můžeš si případně změnit, co Ti
Nette bude vracet z DB. My to používáme na podobnou věc a to, že máme
v entitě array
a do DB se uloží jako json
a pak
při výpisu obráceně.