attributes['meta_value'] = $meta_value; } public function getMetaValueAttribute($value) { if (is_string($value)) { $decoded = json_decode($value, true); return $decoded !== null ? $decoded : $value; } return $value; } public function scopeUserTheme(Builder $query) { return $query ->where('object_type', User::class) ->where('object_id', get_current_user_id()) ->where('meta_key', 'theme'); } public function scopeUpgradeablePath($query, $productId) { return $this->whereHas('upgradeableVariants', function ($query) use ($productId) { if (!empty($productId)) { return $query->where('post_id', $productId); } }) ->where('object_type', PlanUpgradeService::$metaType) ->where('meta_key', PlanUpgradeService::$metaKey); } public function upgradeableVariants() { return $this->hasMany(ProductVariation::class, 'id', 'object_id'); } }