Completed
Push — sf2.7 ( 18de34...b252b6 )
by Laurent
18:26
created

ArticleRepository::getArticles()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 25
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 25
rs 8.8571
cc 2
eloc 14
nc 2
nop 2
1
<?php
2
3
/**
4
 * Entité Article.
5
 *
6
 * PHP Version 5
7
 *
8
 * @author     Quétier Laurent <[email protected]>
9
 * @copyright  2014 Dev-Int GLSR
10
 * @license    http://opensource.org/licenses/gpl-license.php GNU Public License
11
 *
12
 * @version    0.1.0
13
 *
14
 * @link       https://github.com/Dev-Int/glsr
15
 */
16
namespace AppBundle\Entity;
17
18
use Doctrine\ORM\EntityRepository;
19
use Doctrine\ORM\Tools\Pagination\Paginator;
20
21
/**
22
 * ArticleRepository.
23
 *
24
 * @category   Entity
25
 */
26
class ArticleRepository extends EntityRepository
27
{
28
    /**
29
     * Affiche les articles actifs, avec une pagination.
30
     *
31
     * @param int $nbPerPage Nombre d'article par page
32
     * @param int $page      Numéro de la page en cours
33
     *
34
     * @return \Doctrine\ORM\Tools\Pagination\Paginator Objet Paginator
35
     *
36
     * @throws \InvalidArgumentException
37
     */
38
    public function getArticles($nbPerPage, $page)
39
    {
40
        if ($page < 1) {
41
            throw new \InvalidArgumentException(
42
                'l\'argument $page ne peut être inférieur à 1 (valeur : "'.
43
                $page.'").'
44
            );
45
        }
46
47
        $query = $this->createQueryBuilder('a')
48
            ->leftjoin('a.supplier', 's')
49
            ->addSelect('s')
50
            ->where('a.active = 1')
51
            ->orderBy('a.name', 'ASC')
52
            ->getQuery();
53
54
        // On définit l'article à partir duquel commencer la liste
55
        $query->setFirstResult(($page - 1) * $nbPerPage)
56
            // Ainsi que le nombre d'article à afficher
57
            ->setMaxResults($nbPerPage);
58
59
        // Et enfin, on retourne l'objet
60
        // Paginator correspondant à la requête construite
61
        return new Paginator($query);
62
    }
63
64
    /**
65
     * Renvoi les article du fournisseur en paramètre.
66
     *
67
     * @param int $supplier Supplier_id
68
     *
69
     * @return array Query result
70
     */
71
    public function getArticleFromSupplier($supplier)
72
    {
73
        $query = $this->createQueryBuilder('a')
74
            ->where('a.active = 1')
75
            ->where('a.supplier = :id')
76
            ->setParameter('id', $supplier)
77
            ->orderBy('a.name', 'ASC')
78
            ->getQuery();
79
80
        return $query->getResult();
81
    }
82
}
83