FeaturedGroupSource::Manual->value, ]; protected static function booted(): void { static::creating(function (FeaturedGroup $featuredGroup): void { if (filled($featuredGroup->code)) { return; } $baseCode = Str::slug($featuredGroup->group_name) ?: 'group'; $code = $baseCode; $suffix = 2; while (static::query() ->where('tenant_code', $featuredGroup->tenant_code) ->where('code', $code) ->exists()) { $code = "{$baseCode}-{$suffix}"; $suffix++; } $featuredGroup->code = $code; }); } protected function casts(): array { return [ 'source_type' => FeaturedGroupSource::class, 'category_id' => 'integer', 'product_layout' => ProductLayout::class, 'group_layout' => GroupLayout::class, 'group_order' => 'integer', ]; } /** @return BelongsTo */ public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class, 'tenant_code', 'codigo'); } /** @return BelongsTo */ public function category(): BelongsTo { return $this->belongsTo(Category::class); } /** @return HasMany */ public function featuredItems(): HasMany { return $this->hasMany(FeaturedItem::class)->orderBy('order'); } }