for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Belamov\PostgresRange\Casts;
use Belamov\PostgresRange\Ranges\Range;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
abstract class RangeCast implements CastsAttributes
{
/**
* @param Model $model
* @param string $key
* @param Range $value
* @param array $attributes
* @return array
*/
public function set($model, $key, $value, $attributes): array
return [
$key => $this->serializeRange($value),
];
}
* @param Range|null $range
* @return string|null
protected function serializeRange(?Range $range): ?string
if ($range === null) {
return null;
return (string) $range;
* @param mixed $value
* @return Range|null
public function get($model, $key, $value, $attributes): ?Range
$matches = $this->parseStringRange($value);
if (empty($matches)) {
return $this->getRangeInstance($matches);
* @param $value
protected function parseStringRange($value): array
$matches = [];
preg_match('/([\[(])(.*),(.*)([])])/', $value, $matches);
return $matches;
* @param array $params
* @return Range
abstract protected function getRangeInstance(array $params): Range;