Nette/Database – fetchAssoc() nebo něco lepšího?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Klouček
Člen | 57
+
0
-

Zajímám se o způsob, jak naformátovat data získaný z databáze pomocí Nette\Database (ne Table) nebo Dibi. V obojim je fetchAssoc(), ale s ní se mi nepovedlo udělat nějakej pokročilejší výpis přesně, jak bych chtěl.

Třeba když chci vypsat články a ke každýmu info o autorovi+seznam komentářů, položím dotaz:

SELECT a.id AS aid, c.id AS cid, c.*, u.*, a.*, (a.id/2) AS neco
FROM `article` AS `a`
LEFT JOIN `comment` AS `c` ON a.id=c.article_id
LEFT JOIN `user` AS `u` ON a.user_id=u.id
ORDER BY `a`.`title`

Napadlo mě, co kdyby existovala nějaká metoda, kde bych popsal strukturu dat stylem:

[
    'a.id' => [
        'a.*',
        'neco',
        '#user' => 'u.*',
        '#comments' => ['c.id' => 'c.*']
    ]
]

A dostal bych:

[
    1 => [
        'id' => 1,
        'title' => 'Článek 1',
        'neco' => 0.5,
        'user' => ['id' => 1, 'nick' => 'David'],
        'comments' => [
            1 => ['id' => 1, 'comment_text' => 'abc'],
            2 => ['id' => 2, 'comment_text' => 'abc']
        ]
    ],
    //2 => ..
]

Dala by se tím teda sestavit struktura jako generuje ORM. Co si o tom myslíte?

newPOPE
Člen | 648
+
0
-

V podstate mas 2 moznosti:

  1. napis si vlastny formatter ktory ti taku strukturu zostavi (mozno per query to uz zalezi na pouziti)
  2. pouzi ORM

Predpokladam, ze to Nette\DB alebo Dibi to nemas sancu pretlacit nakolko je tu stale moznost 1. a tu si kazdy urobi podla poziadaviek.

David Klouček
Člen | 57
+
0
-

newPOPE napsal(a):
Predpokladam, ze to Nette\DB alebo Dibi to nemas sancu pretlacit nakolko je tu stale moznost 1. a tu si kazdy urobi podla poziadaviek.

Podle mě by bylo dobrý vymyslet něco jako fetchAssoc(), kam ale půjde napasovat jakejkoliv formát. Spíš se divim, že nikomu to nechybí, kromě třeba https://forum.nette.org/…c-vice-joinu. Já na to narážim dost často.

Editoval David Klouček (23. 1. 2017 21:23)

CZechBoY
Člen | 3608
+
+2
-

@DavidKlouček Je lepší dělat entity/value objecty než šíleně mapovat pole a potom to nějak dohledávat v cyklech.