Pivot::clear()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 5
c 2
b 0
f 0
nc 1
nop 2
dl 0
loc 9
rs 10
1
<?php
2
3
namespace Squadron\Base\Helpers\Database;
4
5
use Illuminate\Database\Eloquent\Model;
6
use Squadron\Base\Exceptions\SquadronHelperException;
7
8
class Pivot
9
{
10
    public static function attach(Model $parentModel, $childModels, ?\Closure $afterPivotModelFill = null): void
11
    {
12
        if ($childModels instanceof Model)
13
        {
14
            $childModels = [$childModels];
15
        }
16
17
        /** @var Model $childModel */
18
        foreach ($childModels as $childModel)
19
        {
20
            if (! ($childModel instanceof Model))
21
            {
22
                throw SquadronHelperException::badModelAttach($childModel);
23
            }
24
25
            $parent = class_basename($parentModel);
26
            $child = class_basename($childModel);
27
28
            $parentKey = sprintf('%sUuid', lcfirst($parent));
29
            $childKey = sprintf('%sUuid', lcfirst($child));
30
            $className = sprintf('\App\Models\%s%s', $parent, $child);
31
32
            /** @var Model $newPivotModel */
33
            $newPivotModel = new $className();
34
35
            $newPivotModel->$parentKey = $parentModel->getKey();
36
            $newPivotModel->$childKey = $childModel->getKey();
37
38
            if ($afterPivotModelFill !== null)
39
            {
40
                $afterPivotModelFill($newPivotModel);
41
            }
42
43
            $newPivotModel->save();
44
        }
45
    }
46
47
    public static function clear(Model $parentModel, $childModelClass): void
48
    {
49
        $parent = class_basename($parentModel);
50
        $child = class_basename($childModelClass);
51
52
        $parentKey = sprintf('%sUuid', lcfirst($parent));
53
        $className = sprintf('\App\Models\%s%s', $parent, $child);
54
55
        $className::where($parentKey, $parentModel->getKey())->delete();
56
    }
57
}
58