+
+               //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 = <<<SQL
+SELECT
+       b.id,
+       GREATEST(b.created, kat.created) AS created,
+       GREATEST(b.updated, kat.updated) AS updated,
+       GREATEST(b.created, b.updated, kat.created, kat.updated) AS modified,
+       b.body,
+       b.description,
+       b.slug,
+       b.title,
+       b.k_ids,
+       b.k_slugs,
+       b.k_titles,
+       GROUP_CONCAT(kat.locale ORDER BY kat.locale SEPARATOR "\\n") AS kat_locales,
+       GROUP_CONCAT(kat.slug ORDER BY kat.locale SEPARATOR "\\n") AS kat_slugs,
+       GROUP_CONCAT(kat.title ORDER BY kat.locale SEPARATOR "\\n") AS kat_titles
+FROM (
+       SELECT
+               a.id,
+               GREATEST(a.created, at.created, k.created, kt.created) AS created,
+               GREATEST(a.updated, at.updated, k.updated, kt.updated) AS updated,
+               at.body,
+               at.description,
+               at.slug,
+               at.title,
+               GROUP_CONCAT(k.id ORDER BY k.id SEPARATOR "\\n") AS k_ids,
+               GROUP_CONCAT(kt.slug ORDER BY k.id SEPARATOR "\\n") AS k_slugs,
+               GROUP_CONCAT(kt.title ORDER BY k.id SEPARATOR "\\n") AS k_titles
+       FROM RapsysBlogBundle:Article AS a
+       JOIN RapsysBlogBundle:ArticleTranslation AS at ON (at.article_id = a.id AND at.locale = :locale)
+       LEFT JOIN RapsysBlogBundle:ArticleKeyword AS ak ON (ak.article_id = a.id)
+       LEFT JOIN RapsysBlogBundle:Keyword AS k ON (k.id = ak.keyword_id)
+       LEFT JOIN RapsysBlogBundle:KeywordTranslation AS kt ON (kt.keyword_id = k.id AND kt.locale = :locale)
+       WHERE a.id = :id
+       GROUP BY a.id
+       ORDER BY NULL
+       LIMIT 0, :limit
+) AS b
+LEFT JOIN RapsysBlogBundle:ArticleTranslation AS kat ON (kat.article_id = b.id AND kat.locale <> :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;