tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Rada ohledně struktury SELECTu

před 6 lety

rossini
Člen | 26

Ahoj, má tu takový „překladatelský oříšek“ :) Tedy pro mě…

Mám SELECT:

return dibi::query('
SELECT *
FROM [poi_ACL_role_perms]
LEFT JOIN [poi_ACL_roles] ON  [poi_ACL_role_perms].[roleID] = [poi_ACL_roles].[ID]
LEFT JOIN [poi_ACL_permissions] ON  [poi_ACL_role_perms].[permID] = [poi_ACL_permissions].[ID]
ORDER BY [roleID] ASC
')->fetchAll();

což mi vrací pole:

Array
(
    [0] => DibiRow Object
        (
            [ID] => 2
            [roleID] => 1
            [permID] => 2
            [value] => 1
            [addDate] => DibiDateTime Object
                (
                    [date] => 2009-03-02 17:13:21
                    [timezone_type] => 3
                    [timezone] => Europe/Berlin
                )

            [roleName] => Administrators
            [permKey] => access_admin
            [permName] => Access Admin System
        )

    [1] => DibiRow Object
        (
            [ID] => 7
            [roleID] => 1
            [permID] => 7
            [value] => 1
            [addDate] => DibiDateTime Object
                (
                    [date] => 2009-03-02 17:13:21
                    [timezone_type] => 3
                    [timezone] => Europe/Berlin
                )

            [roleName] => Administrators
            [permKey] => access_premium_content
            [permName] => Access Premium Content
        )
...
)

já nad tím polem potřebuji v šabloně iterovat tak, že [poi_ACL_permissions] … (tedy druhý JOIN) bude vlastně vnořená tabulka. Chtěl jsem tedy dostávat již ze SELECTu něco jako toto:

Array
(
    [0] => DibiRow Object
        (
            [roleName] => Administrators
            [ID] => 2
            [roleID] => 1
            [value] => 1
            [addDate] => DibiDateTime Object
                (
                    [date] => 2009-03-02 17:13:21
                    [timezone_type] => 3
                    [timezone] => Europe/Berlin
                )
            [Permissions] => Array
            [0] =>(
                    [permID] => 2
                    [permKey] => access_admin
                    [permName] => Access Admin System
        )
            [1] =>(
                    [permID] => 3
                    [permKey] => access_premium_content
                    [permName] => Access Premium Content
        )
            [2] =>(
                    [permID] => 4
                    [permKey] => access_inbox
                    [permName] => Access Inbox
        )

        )

...
)

Zkrátka to pole jakoby grupovat dle těch rolí [roleName]. Vím, jak to „ojebat“ v PHP ale říkal jsem si, jestli není elegantnější způsob přímo v DIBI, nebo jestli mi neukážete směr, jak iterovat nad tím původním výsledkem…

před 6 lety

rossini
Člen | 26

Takže si odpovím… Nechápu, jak jsem mohl žít bez dibi fetchassoc :) Už jsem to ukutal :D Díky