Completed
Push — master ( ed7824...4c153c )
by Maarten
01:49 queued 10s
created

CreateMigrationAction::getLocalKey()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Mtolhuys\LaravelSchematics\Actions\Migration;
4
5
use Illuminate\Support\Str;
6
use Illuminate\Support\Facades\File;
7
use Mtolhuys\LaravelSchematics\Services\RuleParser;
8
use Mtolhuys\LaravelSchematics\Http\Requests\CreateRelationRequest;
9
10
class CreateMigrationAction
11
{
12
    /**
13
     * @param $request
14
     * @return bool|int
15
     */
16
    public function execute($request)
17
    {
18
        if ($request instanceof CreateRelationRequest) {
19
            return $this->createRelationMigration($request);
20
        }
21
22
        return $this->createModelMigration($request);
23
    }
24
25
    /**
26
     * @param $request
27
     * @return bool|int
28
     */
29
    private function createRelationMigration($request)
30
    {
31
        $source = app($request['source'])->getTable();
32
        $target = app($request['target'])->getTable();
33
        $foreignKey = $this->getForeignKey($request);
34
        $stub = __DIR__ . '/../../../resources/stubs/migration/relation.stub';
35
        $filename = 'database/migrations/'
36
            . date('Y_m_d_His')
37
            . "_create_{$source}_{$target}_relation.php";
38
39
        return File::put(base_path($filename), str_replace([
40
            '$source$',
41
            '$target$',
42
            '$classname$',
43
            '$column$',
44
            '$foreignKey$'
45
        ], [
46
            $source,
47
            $target,
48
            'Create' . ucfirst($source) . ucfirst($target) . 'Relation',
49
            "\$table->foreign('$foreignKey')->references('{$this->getLocalKey($request)}')->on('$target');",
50
            $foreignKey
51
        ], File::get($stub)));
52
    }
53
54
    /**
55
     * @param $request
56
     * @return bool|int
57
     */
58
    private function createModelMigration($request)
59
    {
60
        $model = ucfirst($request['name']);
61
        $table = Str::plural(Str::snake($model));
62
        $stub = __DIR__ . '/../../../resources/stubs/migration/model.stub';
63
        $filename = 'database/migrations/'
64
            . date('Y_m_d_His')
65
            . "_create_{$table}_table.php";
66
67
        return File::put(base_path($filename), str_replace([
68
            '$classname$',
69
            '$table$',
70
            '$columns$'
71
        ], [
72
            'Create' . Str::plural($model) . 'Table',
73
            $table,
74
            RuleParser::rulesToMigrationColumns($request['fields'])
75
        ], File::get($stub)));
76
    }
77
78
    /**
79
     * @param $request
80
     * @return string
81
     */
82
    private function getLocalKey($request): string
83
    {
84
        return $request['method']['localKey'] ?? 'id';
85
    }
86
87
    /**
88
     * @param $request
89
     * @return string
90
     */
91
    private function getForeignKey($request): string
92
    {
93
        return $request['method']['foreignKey']
94
            ?? strtolower(substr(strrchr($request['target'], "\\"), 1) . '_id');
95
    }
96
}
97