Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 9 měsíci

marvin
Nový člen
Registrovaný: 11. 8. 2011
Příspěvky: 1

fetchAssoc – více nezávislých 1:N vazeb

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?

 

#2 před 9 měsíci

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: fetchAssoc – více nezávislých 1:N vazeb

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)

 

Zápatí