Я использую Symfony 4 и Doctrine2-Spatial . В документации Руководство по конфигурации написано:
Добавьте типы и функции, которые вам нужны, в файл конфигурации Symfony. Имена типов доктрин не прописаны жестко. "
А есть пример:
doctrine:
dbal:
types:
geometry: CrEOF\Spatial\DBAL\Types\GeometryType
point: CrEOF\Spatial\DBAL\Types\Geometry\PointType
polygon: CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType
Мне нужно использовать тип MultiLineString , но в каталоге CrEOF\Spatial\DBAL\Types\Geometry\
такого класса нет. Я добавил MultiLineStringType (копия LineStringType class) в мою директорию App\Doctrine
и добавил строку в конфигурацию доктрины следующим образом:
multilinestring: App\Doctrine\MultiLineStringType
Затем в моем контроллере я делаю следующее:
$parser = new \CrEOF\Geo\WKT\Parser($multilinestring);
$geo = $parser->parse();
$path = new \CrEOF\Spatial\PHP\Types\Geometry\MultiLineString($geo['value']);
$route->setPath($path); // The multilinestring field type
Но потом, когда я сохранил свое учение, я получил исключение
Значения столбца Geometry должны реализовывать GeometryInterface
Пожалуйста, помогите мне. Что я делаю неправильно? Документация очень плохая ...
UPD: Если я помещу данные из нескольких строк в собственный SQL-запрос, например:
UPDATE Routes SET Path=PolyFromText(MULTILINESTRING (....)) WHERE Id=1
и затем получить данные через ORM $entity->getPath()
Я получил нормальный CrEOF\Spatial\PHP\Types\Geometry\MultiLineString
объект. Итак, я думаю, проблема в моем контроллере, где я пытаюсь установить объект MultiLineString.