*/ use HasFactory; /** * model's array form. * * @var array */ protected $fillable = ['name']; /** * The accessors to append to the model's array form. * * @var array */ protected $appends = []; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = ['created_at', 'updated_at']; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'twofaccounts_count' => 'integer', 'user_id' => 'integer', ]; /** * The event map for the model. * * @var array */ protected $dispatchesEvents = [ 'deleted' => GroupDeleted::class, ]; /** * Override The "booting" method of the model * * @return void */ protected static function boot() { parent::boot(); static::created(function (object $model) { Log::info(sprintf('Group %s (id #%d) created for user ID #%s', var_export($model->name, true), $model->id, $model->user_id)); }); static::updated(function (object $model) { Log::info(sprintf('Group %s (id #%d) updated by user ID #%s', var_export($model->name, true), $model->id, $model->user_id)); }); } /** * Retrieve the model for a bound value. * * @param mixed $value * @param string|null $field * @return \Illuminate\Database\Eloquent\Model|null */ public function resolveRouteBinding($value, $field = null) { // The All group is a virtual group with id==0. // It never exists in database so we enforce the route binding // resolution logic to return an instance instead of not found. if ($value === '0') { $group = new self([ 'name' => __('commons.all'), ]); $group->id = 0; return $group; } else { return parent::resolveRouteBinding($value, $field); } } /** * Get the TwoFAccounts of the group. * * @return \Illuminate\Database\Eloquent\Relations\HasMany<\App\Models\TwoFAccount, $this> */ public function twofaccounts() { return $this->hasMany(\App\Models\TwoFAccount::class); } /** * Get the user that owns the group. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, $this> */ public function user() { return $this->belongsTo(\App\Models\User::class); } /** * Scope a query to only include orphan (userless) groups. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeOrphans($query) { return $query->where('user_id', null); } }