*/ public static function sync(): array { return [ 'props' => [ 'sometimes', 'array', static function (string $attribute, mixed $value, Closure $fail): void { static::validateExistingProps($attribute, $value, $fail); }, ], 'props.*' => ['nullable'], ]; } protected static function validateExistingProps(string $attribute, mixed $value, Closure $fail): void { if (! is_array($value) || $value === []) { return; } $propCodes = array_map('strval', array_keys($value)); $existingPropCodes = TenantProp::query() ->whereIn('codigo', $propCodes) ->pluck('codigo') ->all(); $missingPropCodes = array_values(array_diff($propCodes, $existingPropCodes)); if ($missingPropCodes === []) { return; } $fail(sprintf( 'The selected %s are invalid for Tenant: %s.', $attribute, implode(', ', $missingPropCodes), )); } }