Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 2 lety

forkman
Člen
Registrovaný: 28. 10. 2009
Příspěvky: 38

fluent interface a subselect

Zdravíčko, vůbec jsem nepřišel na to, jak pomocí sluent interface donutím dibi udělat subselect, když navážu jen ->select(…, přidá se mi to jako další select z původní tabulky. Zkoušel jsem hledat všude možně, ale na nic jsem nepřišel, díky moc.
Když ten subselect napíšu do prvního selectu do závorek tak jak se má, tak to samozřejmě funguje, ale přehlednost je ta tam.

 

#2 před 2 lety

vlki
dibi guru
Registrovaný: 30. 6. 2008
Příspěvky: 239

Re: fluent interface a subselect

Příklady jsou samovysvětlující. Snad pomůže :)

$subselect = dibi::select('[id]')
        ->from('comments')
        ->where(array('postId%i' => $postId));

$post = dibi::select('*, COUNT(' . $subselect->__toString() . ') AS [commentsCount]')
        ->from('posts')
        ->where(array('id%i' => $postId))
        ->execute()->fetch();

 

#3 před 2 lety

forkman
Člen
Registrovaný: 28. 10. 2009
Příspěvky: 38

Re: fluent interface a subselect

Sice už to pak není moc fluent, ale přesto elegantnější, než to moje, díky.

 

#4 před 2 lety

vlki
dibi guru
Registrovaný: 30. 6. 2008
Příspěvky: 239

Re: fluent interface a subselect

Tak pořád to můžeš zfluentit, ale má to velký dopad na přehlednost.

$post = dibi::select('*, COUNT(' . dibi::select('[id]')
                                       ->from('comments')
                                       ->where(array('postId%i' => $postId))
                                       ->__toString() . ') AS [commentsCount]')
        ->from('posts')
        ->where(array('id%i' => $postId))
        ->execute()->fetch();

 

#5 před 2 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: fluent interface a subselect

Mělo by fungovat i

$post = dibi::select('*')
        ->select(
                dibi::select('count(id)')
                ->from('comments')
                ->where('postId=%i', $postId)
        )->as('commentsCount')
        ->from('posts')
        ->where('id=%i', $postId)
        ->fetch();

 

Zápatí