Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
Question
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
3 / 3
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
1 / 1
1
 brand
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 answers
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Models;
4
5use App\Enums\QuestionType;
6use Illuminate\Database\Eloquent\Factories\HasFactory;
7use Illuminate\Database\Eloquent\Model;
8use Illuminate\Support\Str;
9use Kwaadpepper\CrudPolicies\Enums\CrudAction;
10use Kwaadpepper\CrudPolicies\Enums\CrudType;
11use Kwaadpepper\CrudPolicies\Traits\IsCrudModel;
12use Kwaadpepper\Enum\Traits\CastsEnums;
13
14class Question extends Model
15{
16    use CastsEnums;
17    use HasFactory;
18    use IsCrudModel;
19
20    /** @var string */
21    protected $crudLabelColumn = 'question';
22
23    /** @var string */
24    protected $crudValueColumn = 'id';
25
26    /**
27     * Map attribute names to enum classes.
28     *
29     * @var array
30     */
31    protected $enumCasts = [
32        'type' => QuestionType::class
33    ];
34
35    /**
36     * The attributes that are mass assignable.
37     *
38     * @var string[]
39     */
40    protected $fillable = [
41        'question',
42        'type'
43    ];
44
45    /**
46     * Question
47     *
48     * @param array $attributes
49     */
50    public function __construct(array $attributes = [])
51    {
52        self::$editableProperties = [
53            'question' => [
54                'label' => Str::ucfirst(trans('models.common.question')),
55                'type' => CrudType::string(),
56                'validate' => [
57                    'min:10',
58                    'max:255'
59                ],
60                'actions' => [
61                    CrudAction::viewAny(),
62                    CrudAction::view(),
63                    CrudAction::create(),
64                    CrudAction::update()
65                ]
66            ],
67            'type' => [
68                'label' => Str::ucfirst(trans('models.common.type')),
69                'type' => CrudType::enum(),
70                'enum' => QuestionType::class,
71                'actions' => [
72                    CrudAction::view(),
73                    CrudAction::create(),
74                    CrudAction::update(),
75                ]
76            ],
77            'brand_id' => [
78                'label' => Str::ucfirst(trans('models.classes.brand')),
79                'type' => CrudType::belongsTo(),
80                'belongsTo' => Brand::class,
81                'actions' => [
82                    CrudAction::viewAny(),
83                    CrudAction::view(),
84                    CrudAction::create(),
85                    CrudAction::update(),
86                ]
87            ],
88            'answers' => [
89                'label' => Str::ucfirst(Str::plural(trans('models.classes.answers'))),
90                'type' => CrudType::hasMany(),
91                'hasMany' => Answer::class,
92                'hasManyLabel' => 'answer',
93                'readonly' => true,
94                'actions' => [
95                    CrudAction::viewAny(),
96                    CrudAction::view(),
97                    CrudAction::create(),
98                    CrudAction::update(),
99                ]
100            ]
101        ];
102        parent::__construct($attributes);
103    }
104
105    // * RELATIONS
106
107    /**
108     * Brand BelongsTo relation
109     *
110     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
111     */
112    public function brand()
113    {
114        return $this->belongsTo(Brand::class);
115    }
116
117    /**
118     * Answer Has many relation
119     *
120     * @return \Illuminate\Database\Eloquent\Relations\HasMany
121     */
122    public function answers()
123    {
124        return $this->hasMany(Answer::class);
125    }
126}