QueryBuilder   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 41
rs 10
wmc 6

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getInstance() 0 7 2
A newQuery() 0 5 1
A getQueryClass() 0 13 3
1
<?php
2
3
namespace Sirius\Orm;
4
5
class QueryBuilder
6
{
7
    /**
8
     * @var array
9
     */
10
    protected $queryClasses = [];
11
12
    /**
13
     * @var QueryBuilder
14
     */
15
    protected static $instance;
16
17
    public static function getInstance()
18
    {
19
        if (! static::$instance) {
20
            static::$instance = new static;
21
        }
22
23
        return static::$instance;
24
    }
25
26
    public function newQuery(Mapper $mapper): Query
27
    {
28
        $queryClass = $this->getQueryClass($mapper);
29
30
        return new $queryClass($mapper);
31
    }
32
33
    protected function getQueryClass(Mapper $mapper)
34
    {
35
        $mapperClass = get_class($mapper);
36
        if (! isset($this->queryClasses[$mapperClass])) {
37
            $queryClass = $mapperClass . 'Query';
38
            if (class_exists($queryClass)) {
39
                $this->queryClasses[$mapperClass] = $queryClass;
40
            } else {
41
                $this->queryClasses[$mapperClass] = Query::class;
42
            }
43
        }
44
45
        return $this->queryClasses[$mapperClass];
46
    }
47
}
48