Completed
Push — master ( 5666c1...f0d869 )
by Arman
01:12 queued 01:07
created

ModelFactory   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 10
c 2
b 0
f 0
dl 0
loc 38
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A get() 0 15 3
A create() 0 5 1
1
<?php
2
3
/**
4
 * Quantum PHP Framework
5
 *
6
 * An open source software development framework for PHP
7
 *
8
 * @package Quantum
9
 * @author Arman Ag. <[email protected]>
10
 * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11
 * @link http://quantum.softberg.org/
12
 * @since 2.9.6
13
 */
14
15
namespace Quantum\Factory;
16
17
use Quantum\Libraries\Database\Exceptions\ModelException;
18
use Quantum\Libraries\Database\Database;
19
use Quantum\Mvc\QtModel;
20
21
/**
22
 * Class ModelFactory
23
 * @package Quantum\Factory
24
 */
25
class ModelFactory
26
{
27
28
    /**
29
     * Gets the Model
30
     * @param string $modelClass
31
     * @return QtModel
32
     * @throws ModelException
33
     */
34
    public static function get(string $modelClass): QtModel
35
    {
36
        if (!class_exists($modelClass)) {
37
            throw ModelException::notFound($modelClass);
38
        }
39
40
        $model = new $modelClass();
41
42
        if (!$model instanceof QtModel) {
43
            throw ModelException::notModelInstance([$modelClass, QtModel::class]);
44
        }
45
46
        $model->setOrm(self::create($model->table, $model->idColumn, $model->foreignKeys ?? [], $model->hidden ?? []));
47
48
        return $model;
49
    }
50
51
    /**
52
     * @param string $table
53
     * @param string $idColumn
54
     * @param array $foreignKeys
55
     * @param array $hidden
56
     * @return mixed
57
     */
58
    public static function create(string $table, string $idColumn = 'id', array $foreignKeys = [], array $hidden = [])
59
    {
60
        $ormClass = Database::getInstance()->getOrmClass();
61
62
        return new $ormClass($table, $idColumn, $foreignKeys, $hidden);
63
    }
64
}