Oznámení
Omlouváme se, provoz fóra byl ukončen
fetchAssoc – více nezávislých 1:N vazeb
Upozornění: Tohle vlákno je hodně staré.
před 8 lety
- marvin
- Člen | 1
Zdravím, rád bych oživil jeden starší topic
Ahoj,
mám tabulky s uživateli, a k tomu další dvě s fotkami a komentáři (takže dvě 1:n vazby). Zajímá mě, jestli se dá v associativním deskriptoru nějak zapsat, aby mi vypsal strukturu podobnou následující:
<?php $user['user__id'] ['name'] ['surname'] ....etc... ['photo__id'] [1] [2] ...pole fotek podle id... ['comment_id'] [5] [8] ...pole komentářů podle id... ?>
nebo musím pro každou takovou vazbu vypsat nový dotaz?
před 8 lety
- Milo
- Nette Core | 1119
Myslím, že současnou syntaxí fetchAssoc()
toho nelze
docílit. Dělám to následovně a výsledek funkce cachuju.
$rows = $db->query('
SELECT
[user.id] AS [uId],
[user.name] AS [uName],
[photo.id] AS [pId],
[photo.file] AS [pFile],
[comment.id] AS [cId],
[comment.text] AS [cText]
FROM
[user]
LEFT JOIN [photo] ON [user.id] = [photo.id_user]
LEFT JOIN [comment] ON [user.id] = [comment.id_user]
');
$emptyUser = array(
'id' => NULL,
'name' => NULL,
'photos' => array(),
'comments' => array(),
);
$users = array();
foreach ($rows AS $row)
{
if (!isSet($users[$row->uId]))
{
$users[$row->uId] = $emptyUser;
$users[$row->uId]['id'] = $row->uId;
$users[$row->uId]['name'] = $row->uName;
}
$user = & $users[$row->uId];
if ($row->pId !== NULL && !isSet($user['photos'][$row->pId]))
{
$user['photos'][$row->pId] = $row->pFile;
}
if ($row->cId !== NULL && !isSet($user['comments'][$row->cId]))
{
$user['comments'][$row->cId] = $row->cText;
}
}
Editoval Milo (12. 8. 2011 13:09)