grimzy / laravel-mysql-spatial

MySQL Spatial Data Extension integration with Laravel.
Other
792 stars 312 forks source link

Error in save or retrieve #182

Open apeivandi opened 2 years ago

apeivandi commented 2 years ago

Hi My code was working fine and all of the sudden I'm getting a real strange error. (really all of the sudden! I didn't change a line of code! Only my mac got updated to latest version which I honestly don't see how that could be an issue!)

When I try to save or retrieve any entity that has a point data type in it I get this exception: PHP Fatal error: During inheritance of JsonSerializable: Uncaught ErrorException: Return type of Grimzy\LaravelMysqlSpatial\Types\Point::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/amirpeivandi/Projects/nwrewards/vendor/grimzy/laravel-mysql-spatial/src/Types/Point.php:93

Any idea what this could be?

Amir

bossrabbit commented 2 years ago

I'm experiencing the same problem with PHP 8.1.2 and Laravel 8.65 and version 5.0.0 of this package.

If you are running PHP 8.1 and higher you can suppress this error by adding the attribute #[\ReturnTypeWillChange] before the jsonSerialize() method in .../vendor/grimzy/laravel-mysql-spatial/src/Types/Point.php. More about this new attribute here.

    /**
     * Convert to GeoJson Point that is jsonable to GeoJSON.
     *
     * @return \GeoJson\Geometry\Point
     */
    #[\ReturnTypeWillChange]
    public function jsonSerialize()
    {
        return new GeoJsonPoint([$this->getLng(), $this->getLat()]);
    }