Nette/Database – fetchAssoc() nebo něco lepšího?
- David Klouček
- Člen | 57
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?
- David Klouček
- Člen | 57
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)