Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
TemplateCategory
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 3
30
0.00% covered (danger)
0.00%
0 / 1
 boot
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
12
 templates
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 subcategory_lv1
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Models;
4
5use Illuminate\Database\Eloquent\Relations\HasMany;
6use Illuminate\Support\Facades\Validator;
7use Illuminate\Validation\Rule;
8
9class TemplateCategory extends Moloquent
10{
11    protected $table = 'template_categories';
12
13    protected $fillable = [
14        'name',
15        'slug',
16        'position'
17    ];
18
19    public static function boot(): void
20    {
21        parent::boot();
22
23        //Auto increment position field
24        static::creating(function ($model) {
25            if (!$model->position) {
26                $lastPosition = self::max('position') ?? 0;
27                $model->position = $lastPosition + 1;
28            }
29        });
30
31        // Validate uniqueness of position field
32        static::saving(function ($model) {
33            $validator = Validator::make([$model->getAttributes()], [
34                'position' => [
35                    Rule::unique('template_categories')->ignore($model->getKey())
36                ],
37            ]);
38
39            if ($validator->fails()) {
40                throw new \Exception($validator->errors()->first());
41            }
42        });
43    }
44
45    public function templates(): HasMany
46    {
47        return $this->hasMany(Template::class, 'category_id');
48    }
49
50    public function subcategory_lv1(): HasMany
51    {
52        return $this->hasMany(TemplateSubcategoryLv1::class, 'parent_category_id');
53    }
54}