* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Rapsys\BlogBundle\Repository; use Doctrine\ORM\Query\ResultSetMapping; /** * ArticleRepository * * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ class ArticleRepository extends EntityRepository { /** * Find article count as int * * @return integer The articles count */ public function findCountAsInt(): int { //Set the request $req = <<replace($req); //Get result set mapping instance //XXX: DEBUG: see ../blog.orig/src/Rapsys/BlogBundle/Repository/ArticleRepository.php $rsm = new ResultSetMapping(); //Declare all fields //XXX: see vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php //addScalarResult($sqlColName, $resColName, $type = 'string'); $rsm->addScalarResult('count', 'count', 'integer'); //Get result return $this->_em ->createNativeQuery($req, $rsm) ->getSingleScalarResult(); } /** * Find articles as array * * @param integer $page The page * @param integer $count The count * @return array The articles array */ public function findAllAsArray(int $page, int $count): array { //Set the request $req = <<replace($req); //Get result set mapping instance //XXX: DEBUG: see ../blog.orig/src/Rapsys/BlogBundle/Repository/ArticleRepository.php $rsm = new ResultSetMapping(); //Declare all fields //XXX: see vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php //addScalarResult($sqlColName, $resColName, $type = 'string'); $rsm->addScalarResult('id', 'id', 'integer') ->addScalarResult('body', 'body', 'string') ->addScalarResult('description', 'description', 'string') ->addScalarResult('slug', 'slug', 'string') ->addScalarResult('title', 'title', 'string') ->addScalarResult('k_ids', 'k_ids', 'string') ->addScalarResult('k_slugs', 'k_slugs', 'string') ->addScalarResult('k_titles', 'k_titles', 'string') ->addScalarResult('created', 'created', 'datetime') ->addScalarResult('updated', 'updated', 'datetime') ->addScalarResult('modified', 'modified', 'datetime') ->addIndexByScalar('id'); //Get result $result = $this->_em ->createNativeQuery($req, $rsm) ->setParameter('offset', $page * $count) ->setParameter('count', $count) ->getArrayResult(); //Set return $return = []; //Iterate on each city foreach($result as $data) { //Add to return $return[$data['id']] = [ 'id' => $id = $data['id'], 'body' => $data['body'], 'description' => $data['description'], 'slug' => $slug = $data['slug'], 'title' => $data['title'], 'created' => $data['created'], 'updated' => $data['updated'], 'modified' => $data['modified'], 'link' => $this->router->generate('rapsys_blog_article_view', ['id' => $id, 'slug' => $slug]), 'keywords' => [] ]; //Explode keyword ids $data['k_ids'] = explode("\n", $data['k_ids']); //Explode keyword slugs $data['k_slugs'] = explode("\n", $data['k_slugs']); //Explode keyword titles $data['k_titles'] = explode("\n", $data['k_titles']); foreach($data['k_ids'] as $k => $id) { $return[$data['id']]['keywords'][$id] = [ 'id' => $id, 'slug' => $slug = $data['k_slugs'][$k], 'title' => $data['k_titles'][$k], 'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $id, 'slug' => $slug]), ]; } } //Return return return $return; } /** * Find article by id as array * * @param integer $id The article id * @return array The article array */ public function findByIdAsArray(int $id): array { //Set the request $req = << :locale) GROUP BY b.id SQL; //Replace bundle entity name by table name $req = $this->replace($req); //Get result set mapping instance //XXX: DEBUG: see ../blog.orig/src/Rapsys/BlogBundle/Repository/ArticleRepository.php $rsm = new ResultSetMapping(); //Declare all fields //XXX: see vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php //addScalarResult($sqlColName, $resColName, $type = 'string'); $rsm->addScalarResult('id', 'id', 'integer') ->addScalarResult('body', 'body', 'string') ->addScalarResult('description', 'description', 'string') ->addScalarResult('slug', 'slug', 'string') ->addScalarResult('title', 'title', 'string') ->addScalarResult('k_ids', 'k_ids', 'string') ->addScalarResult('k_slugs', 'k_slugs', 'string') ->addScalarResult('k_titles', 'k_titles', 'string') ->addScalarResult('kat_locales', 'kat_locales', 'string') ->addScalarResult('kat_slugs', 'kat_slugs', 'string') ->addScalarResult('kat_titles', 'kat_titles', 'string') ->addScalarResult('created', 'created', 'datetime') ->addScalarResult('updated', 'updated', 'datetime') ->addScalarResult('modified', 'modified', 'datetime'); //Get data $data = $this->_em ->createNativeQuery($req, $rsm) ->setParameter('id', $id) ->getOneOrNullResult(); //Set return $return = [ 'id' => $id = $data['id'], 'body' => $data['body'], 'description' => $data['description'], 'slug' => $slug = $data['slug'], 'title' => $data['title'], 'created' => $data['created'], 'updated' => $data['updated'], 'modified' => $data['modified'], 'link' => $this->router->generate('rapsys_blog_article_view', ['id' => $id, 'slug' => $slug]), 'alternates' => [], 'keywords' => [] ]; //Explode keyword ids $data['k_ids'] = explode("\n", $data['k_ids']); //Explode keyword slugs $data['k_slugs'] = explode("\n", $data['k_slugs']); //Explode keyword titles $data['k_titles'] = explode("\n", $data['k_titles']); foreach($data['k_ids'] as $k => $kid) { $return['keywords'][$kid] = [ 'id' => $kid, 'slug' => $slug = $data['k_slugs'][$k], 'title' => $data['k_titles'][$k], 'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $kid, 'slug' => $slug]), ]; } //Explode alternate locales $data['kat_locales'] = explode("\n", $data['kat_locales']); //Explode alternate slugs $data['kat_slugs'] = explode("\n", $data['kat_slugs']); //Explode alternate titles $data['kat_titles'] = explode("\n", $data['kat_titles']); foreach($data['kat_locales'] as $k => $locale) { $return['alternates'][$locale] = [ 'locale' => $locale, 'slug' => $slug = $data['kat_slugs'][$k], 'title' => $data['kat_titles'][$k], 'link' => $this->router->generate('rapsys_blog_article_view', ['_locale' => $locale, 'id' => $id, 'slug' => $slug]), ]; } //Return return return $return; } }