Bolt\Legacy\Storage::executeGetContentQueries PHP Method

executeGetContentQueries() protected method

This is tightly coupled to $this->getContent()
protected executeGetContentQueries ( array $decoded ) : array
$decoded array
return array
    protected function executeGetContentQueries($decoded)
    {
        // Perform actual queries and hydrate
        $totalResults = false;
        $results = false;
        foreach ($decoded['queries'] as $query) {
            $statement = sprintf('SELECT %s.* %s %s %s', $query['tablename'], $query['from'], $query['where'], $query['order']);
            if ($decoded['self_paginated'] === true) {
                // self pagination requires an extra query to return the actual number of results
                if ($decoded['return_single'] === false) {
                    $countStatement = sprintf('SELECT COUNT(*) as count %s %s', $query['from'], $query['where']);
                    $countRow = $this->app['db']->executeQuery($countStatement)->fetch();
                    $totalResults = $countRow['count'];
                }
                if (isset($decoded['parameters']['paging']) && $decoded['parameters']['paging'] === true) {
                    $offset = ($decoded['parameters']['page'] - 1) * $decoded['parameters']['limit'];
                } else {
                    $offset = null;
                }
                $limit = $decoded['parameters']['limit'];
                // @todo this will fail when actually using params on certain databases
                $statement = $this->app['db']->getDatabasePlatform()->modifyLimitQuery($statement, $limit, $offset);
            } elseif (!empty($decoded['parameters']['limit'])) {
                // If we're not paging, but we _did_ provide a limit.
                $limit = $decoded['parameters']['limit'];
                $statement = $this->app['db']->getDatabasePlatform()->modifyLimitQuery($statement, $limit);
            }
            if (!empty($decoded['parameters']['printquery'])) {
                // @todo formalize this
                echo nl2br(htmlentities($statement));
            }
            $rows = $this->app['db']->fetchAll($statement, $query['params']);
            // Convert the row 'arrays' into \Bolt\Legacy\Content objects.
            // Only get the Taxonomies and Relations if we have to.
            $rows = $this->hydrateRows($query['contenttype'], $rows, $decoded['hydrate']);
            if ($results === false) {
                $results = $rows;
            } else {
                // We can no longer maintain keys when merging subresults
                $results = array_merge($results, array_values($rows));
            }
        }
        if ($totalResults === false) {
            $totalResults = count($results);
        }
        return [$results, $totalResults];
    }

Usage Example

Example #1
0
 protected function executeGetContentQueries($decoded)
 {
     $this->queries[] = $decoded;
     return parent::executeGetContentQueries($decoded);
 }