Oznámení
Omlouváme se, provoz fóra byl ukončen
fluent interface a subselect
Upozornění: Tohle vlákno je hodně staré.
před 10 lety
- forkman
- Člen | 62
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řed 10 lety
- vlki
- Člen | 218
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();
před 10 lety
- forkman
- Člen | 62
Sice už to pak není moc fluent, ale přesto elegantnější, než to moje, díky.
před 10 lety
- vlki
- Člen | 218
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();
před 10 lety
- David Grudl
- Nette Core | 6806
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();