public function toArray()
    {
        $result = [];

        ArrayList::of($this->getFillable())
            ->append(ArrayList::of($this->getVisible()))
            ->unique(SORT_STRING)
            ->exceptValues($this->getHidden())
            ->each(function ($key) use (&$result) {
                $getter = vsprintf('get%s', [Str::studly($key)]);

                if (method_exists($this, $getter)) {
                    $result[$key] = $this->$getter();

                    return;
                }

                $camel = Str::camel($key);
                $result[$key] = $this->$camel;
            });

        return $result;
    }