clrghouz/app/Casts/CompressedStringOrNull.php
Deon George 81f59dcbb8
All checks were successful
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 42s
Create Docker Image / Build Docker Image (arm64) (push) Successful in 1m50s
Create Docker Image / Final Docker Image Manifest (push) Successful in 11s
Remove EncodeUTF8 infavour of using attribute casting only. The implementation of EncodeUTF8 was not correct, essentially removing any previous casting causing issues when saving a record.
2024-06-01 10:46:02 +10:00

46 lines
1.1 KiB
PHP

<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
class CompressedStringOrNull implements CastsAttributes
{
/**
* Cast the given value.
*
* @param Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string|null
* @note postgres bytea columns the value is a resource stream
*/
public function get(Model $model,string $key,mixed $value,array $attributes): ?string
{
// For stream resources, we to fseek in case we've already read it.
if (is_resource($value))
fseek($value,0);
$value = is_resource($value)
? stream_get_contents($value)
: $value;
return $value ? zstd_uncompress(base64_decode($value)) : NULL;
}
/**
* Prepare the given value for storage.
*
* @param Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string|null
*/
public function set(Model $model,string $key,$value,array $attributes): ?string
{
return $value ? base64_encode(zstd_compress($value)) : NULL;
}
}