Nejste přihlášen(a)
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.
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();
Sice už to pak není moc fluent, ale přesto elegantnější, než to moje, díky.
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();
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();