Passed
Pull Request — master (#241)
by Arman
03:23
created

ModelFactory::createOrmInstance()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 4
dl 0
loc 5
rs 10
c 0
b 0
f 0
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\Model\Factories;
16
17
use Quantum\Libraries\Database\Contracts\DbalInterface;
18
use Quantum\Model\Exceptions\ModelException;
19
use Quantum\Libraries\Database\Database;
20
use Quantum\Model\QtModel;
21
22
/**
23
 * Class ModelFactory
24
 * @package Quantum\Model
25
 */
26
class ModelFactory
27
{
28
29
    /**
30
     * Gets the Model
31
     * @param string $modelClass
32
     * @return QtModel
33
     * @throws ModelException
34
     */
35
    public static function get(string $modelClass): QtModel
36
    {
37
        if (!class_exists($modelClass)) {
38
            throw ModelException::notFound($modelClass);
39
        }
40
41
        $model = new $modelClass();
42
43
        if (!$model instanceof QtModel) {
44
            throw ModelException::notModelInstance([$modelClass, QtModel::class]);
45
        }
46
47
        $ormInstance = self::createOrmInstance(
48
            $model->table,
49
            $model->idColumn,
50
            $model->foreignKeys ?? [],
51
            $model->hidden ?? []
52
        );
53
54
        $model->setOrmInstance($ormInstance);
55
56
        return $model;
57
    }
58
59
    /**
60
     * @param string $table
61
     * @param string $idColumn
62
     * @param array $foreignKeys
63
     * @param array $hidden
64
     * @return mixed
65
     */
66
    public static function createOrmInstance(string $table, string $idColumn = 'id', array $foreignKeys = [], array $hidden = []): DbalInterface
67
    {
68
        $ormClass = Database::getInstance()->getOrmClass();
69
70
        return new $ormClass($table, $idColumn, $foreignKeys, $hidden);
71
    }
72
}