Completed
Push — master ( 42f7c0...7a19f2 )
by Arman
01:16 queued 20s
created

ModelFactory.php$0 ➔ createDynamicModel()   A

Complexity

Conditions 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 9
rs 9.9666
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.8
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
     * Creates anonymous dynamic model
61
     * @param string $table
62
     * @param string $idColumn
63
     * @param array $foreignKeys
64
     * @param array $hidden
65
     * @return QtModel
66
     */
67
    public static function createDynamicModel(string $table, string $idColumn = 'id', array $foreignKeys = [], array $hidden = []): QtModel
68
    {
69
        $model = new class extends QtModel {};
70
71
        $ormInstance = self::createOrmInstance($table, $idColumn, $foreignKeys, $hidden);
72
73
        $model->setOrmInstance($ormInstance);
74
75
        return $model;
76
    }
77
78
    /**
79
     * @param string $table
80
     * @param string $idColumn
81
     * @param array $foreignKeys
82
     * @param array $hidden
83
     * @return mixed
84
     */
85
    public static function createOrmInstance(string $table, string $idColumn = 'id', array $foreignKeys = [], array $hidden = []): DbalInterface
86
    {
87
        $ormClass = Database::getInstance()->getOrmClass();
88
89
        return new $ormClass($table, $idColumn, $foreignKeys, $hidden);
90
    }
91
}