Lze nejak upravit data z vypisu z db

dehtak
Člen | 113
+
0
-

Narazim na jeden problem v nete kdyz si vypisu data z databaze
a pak chci jedno pole zmenit nebo upravit , tak mi nette vyhodi chybu.
k pochopeni napisu priklad:

     $row = $this->db->table('tabulka')->get(1);
     $row->data = Json::decode($this->row->data, Json::FORCE_ARRAY);

No a tady mi nette vyhodi chybu
**
ActiveRow is read-only; use update() method instead.
**
Prece kdyz si vypisu data tak si je muzu ruzne pak upravovat. Proc mi to nedovoli. Ja vim mel bych udelat novou promennou.
ale ten celkovej $row chci predavat dal uz s upravou a nechci predavat 50 promennych.
Neexistuje na to neco v nette ?

Nette databaze uz vlastne neco takoveho dela kdyz mate treba sloupec date (DateTime) tak to sama databaze prekonvertuje a vystup je trida DATETIME nikoliv string. A tez je to $row->date.

Neco podobnyho chci pouzit pro svoje sloupce. Ne datetime ale treba nejakou tridu nebo prevest string json na rray apodobne.

Editoval dehtak (7. 11. 2021 13:05)

Šaman
Člen | 2663
+
+4
-

Ty jsi ta data ale ještě nenačetl, stále tam máš ActiveRow, což je objekt s vazbou na databázi. Nejprve si udělej toArray(), pak tam budeš mít data už bez té vazby, takže si je můžeš měnit.

dehtak
Člen | 113
+
0
-

no kdyz pouziju klasicky connection a dam

$row = $this->db->query('SELECT * FROM table WHERE id= ?', $id)->fetch();
$row->data = 'neco';
tak to funguje
Šaman
Člen | 2663
+
+3
-

Protože $connection->query()->fetch(); nevrací ActiveRow (s vazbou na databázi), ale jen Row (vylepšený ArrayHash).

Cokoliv začíná $connection->table()->… je záležitost Database Exploreru, což je jiná sekce dokumentace, než základní práce s databází $connection->query()->… – Database Core.
https://doc.nette.org/cs/database