'boolean', ]; } // 3. Scope (grouped by column, then alphabetical) // Column Group: is_active #[Scope] protected function active(Builder $query): void { $query->where('is_active', true); } #[Scope] protected function inactive(Builder $query): void { $query->where('is_active', false); } // 4. Other Methods public static function getActiveWithVariantsAndCategories(): Collection { return self::query() ->active() ->with([ 'categories', 'variants' => fn ($query) => $query ->with('media') ->orderBy('created_at'), ]) ->get(); } // 5. Relation public function categories(): BelongsToMany { return $this->belongsToMany(Category::class, 'product_categories'); } public function ownerVerificationRequests(): MorphMany { return $this->morphMany(OwnerVerificationRequest::class, 'subject'); } public function pendingOwnerVerificationRequest(): MorphOne { return $this->morphOne(OwnerVerificationRequest::class, 'subject') ->where('status', OwnerVerificationStatus::PENDING) ->latestOfMany(); } public function variants(): HasMany { return $this->hasMany(ProductVariant::class); } }